2012-12-19 12 views
8

में काम करने के लिए आपको जावा विधि एनोटेशन कैसे प्राप्त होते हैं मेरे पास दो परियोजनाएं, एक स्कैला प्रोजेक्ट और जावा प्रोजेक्ट है। मेरा स्कैला प्रोजेक्ट बिल्ड पथ में जावा प्रोजेक्ट का संदर्भ देता है।स्कैला

@Target(ElementType.METHOD) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface MyAnnotation { 
    public String Name(); 
} 

मेरी स्केला परियोजना में, मैं कुछ तरीकों व्याख्या कर रहा हूँ: मेरे जावा परियोजना में, मैं निम्नलिखित एनोटेशन की घोषणा कर रहा हूँ। अर्थात।

class MyClass { 
    ... 
    @MyAnnotation(Name="Blah") 
    def myMethod() { 
     ... 
    } 
} 

कहीं अन्य फ़ाइल में, मैं एनोटेशन बाहर निकलने के लिए कोशिश कर रहा हूँ।

var methods = myClassInstance.getClass().getDeclaredMethods() 
var myMethod : Method = null 
for (method <- methods) { 
    if (method.getName().equals("myMethod")) { 
    myMethod = method 
    } 
} 
var annotations = myMethod.getDeclaredAnnotations() 

दुर्भाग्य से, annotations हमेशा एक खाली सरणी है। क्या मैं कुछ मौलिक रूप से गलत कर रहा हूं या क्या मुझे कुछ मामूली याद आ रही है? धन्यवाद!

संपादित मूल रूप से, मैं myAnnotation साथ MyMethod व्याख्या की गई थी दो बार है, जो सही नहीं है के रूप में किसी को बताया। यह पता चला कि यह समस्या नहीं थी। मुझे अभी भी annotations के लिए खाली सरणी मिल रही है। कोई अपवाद नहीं फेंक दिया जा रहा है।

उत्तर

7

मैं अपने कोड की कोशिश की, समस्या यह है कि आपके उपयोग @MyAnnotation MyMethod के लिए दो बार, जो AnnotationFormatError उठाना चाहिए: वर्ग

के लिए एनोटेशन डुप्लिकेट जब मैं एक बार इसका इस्तेमाल करने के बदलने के लिए, प्रतिबिंब सिर्फ annotions प्राप्त करता है।

+0

इसे इंगित करने के लिए धन्यवाद। दुर्भाग्य से यह समस्या नहीं थी। यहां तक ​​कि एक एनोटेशन के साथ, मुझे अभी भी खाली सरणी मिल रही है। – Jordan

+0

कोई अपवाद नहीं फेंक दिया जा रहा है आप इसे काम करने के लिए कैसे मिला? क्या आप एक उदाहरण पोस्ट कर सकते हैं? धन्यवाद! – Jordan

+0

जैसा कि मैंने कहा, मैं बस आपके पोस्ट कोड का उपयोग करता हूं। आपका पोस्ट कोड अपवाद (पहला संस्करण) बढ़ाता है, और संकलन त्रुटियों (दूसरा संस्करण, आपको 'var myMethod = null' पंक्ति के प्रकार को परिभाषित करना चाहिए), मैं उन्हें हल करने के बाद, यह काम करता है। और मेरा स्कैला संस्करण 2.9.3 –