2010-08-24 16 views
6

पर एक डिफ़ॉल्ट वर्ग शाब्दिक मूल्य का उपयोग करना मैं निम्नलिखित टिप्पणी के साथ एक दिया सेम वर्ग के क्षेत्रों में से कुछ पर टिप्पणी करना चाहते हैं:एक एनोटेशन

@Target({FIELD}) 
@Retention(RUNTIME) 
public @interface Process { 

    Class<? extends ProcessingStrategy> using() default DefaultImplStrategy.class; 

} 

बहुत अधिक डोमेन में जाने के बिना, प्रत्येक एनोटेट संपत्ति की जरूरत है इस पर परिभाषित एक प्रोसेसिंगस्ट्रेटी है, इसलिए एनोटेशन पर उपयोग() संपत्ति। यह ठीक है और जिस तरह से मैं इसे पसंद करता हूं काम करता है।

मैं भी अधिकांश समय (डिफ़ॉल्ट रूप से परिभाषित डिफ़ॉल्ट) का उपयोग करने के लिए रणनीति का एक डिफ़ॉल्ट कार्यान्वयन निर्दिष्ट करना चाहता हूं। यह ग्रहण में ठीक काम करता है।

हालांकि

, जब मैं इस एक नियमित रूप से JDK (Maven के माध्यम से लागू) मैं निम्नलिखित त्रुटि मिलती है का उपयोग कर संकलित करने के लिए प्रयास करें:

found : java.lang.Class<DefaultImplStrategy> 
required: java.lang.Class<? extends ProcessingStrategy> 

मैं इसे जेनरिक, एनोटेशन, वर्ग शाब्दिक के कुछ संयोजन है अनुमान लगा रहा हूँ और दोषी जो यहां गलती हैं लेकिन मैं ईमानदारी से नहीं जानता क्यों। मैंने जेएलएस में डिफ़ॉल्ट मानों के आसपास के नियमों पर एक नज़र डाली है और मुझे लगता है कि कुछ भी उल्लंघन नहीं कर रहा है।

यह देखते हुए कि DefaultImplStrategy निश्चित रूप से प्रसंस्करणस्ट्रेटी लागू करता है, मैं यहां क्या गलत कर रहा हूं?

+0

JDK क्या है संस्करण? –

+0

यह jdk 1.6.0_16 – GaryF

+0

इंटेलिजे में jdk1.5.0_19 के साथ यह ठीक संकलित करता है। –

उत्तर

3

इसका संक्षिप्त संस्करण यह है कि मैवेन, लंबोक और डिफ़ॉल्ट एनोटेशन का कुछ संयोजन अच्छी तरह से एक साथ नहीं खेलता है। लंबा संस्करण on the Lombok mailing list है।

समाधान अपेक्षाकृत सरल है: पूरी तरह से डिफ़ॉल्ट प्रकार यानी

@Target({FIELD}) 
@Retention(RUNTIME) 
public @interface Process { 

    Class<? extends ProcessingStrategy> using() default com.example.processing.DefaultImplStrategy.class; 

} 
अर्हता
+0

यह मेरी एंटी-आधारित प्रोजेक्ट में भी हो रहा है जो लंबोक का उपयोग नहीं करता है, इसलिए यह jdk खुद – Aldo

+0

@Aldo के साथ एक समस्या होनी चाहिए, जबकि मुझे अब इसकी आवश्यकता नहीं है (मेरे पास कामकाज से परे), मैं चाहता हूं यह सुनना अच्छा लगता है कि समस्या क्या है यदि आप इसे समझते हैं। – GaryF

0

क्यों पता नहीं है, लेकिन यह शायद कार्य करेगा जब आप DefaultImplStrategy करने के लिए पूर्ण वर्ग पथ देना

+0

उम्म, हाँ। यह वही है जो मैंने अपने (मेरे अपने) प्रश्न के उत्तर में कहा था। – GaryF