2013-05-03 10 views
7

Searchable.javaप्रतिबिंब getAnnotations() रिटर्न अशक्त

@Target(ElementType.FIELD) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface Searchable { } 

Obj.java

public class Obj { 
    @Searchable 
    String myField; 
} 

शून्य (String [] args)

Annotation[] annotations = Obj.class.getDeclaredField("myField").getAnnotations(); 

मैं annotations की उम्मीद करूँगा जिसमें मेरा @Searchable होगा। हालांकि यह null है। दस्तावेज़ीकरण के अनुसार, यह विधि:

इस तत्व पर मौजूद सभी एनोटेशन लौटाता है। (इस तत्व में कोई एनोटेशन नहीं है, तो लंबाई शून्य की सरणी देता है।) इस विधि का कॉलर लौटाए गए सरणी को संशोधित करने के लिए स्वतंत्र है; इसका अन्य कॉलर्स पर लौटे गए सरणी पर कोई प्रभाव नहीं पड़ेगा।

(मेरे लिए) और भी अजीब है कौन सा है, क्योंकि यह रिटर्न null बजाय Annotation[0]

मैं यहां क्या गलत कर रहा हूं और अधिक महत्वपूर्ण, मैं अपना Annotation कैसे प्राप्त कर पाऊंगा?

+3

ऐसा लगता है कि यह मेरी मशीन पर काम करता है। रनटाइम पर आप जावा संस्करण का उपयोग कर रहे हैं? क्या आप अपनी कस्टम एनोटेशन पर '@Retention (RetentionPolicy.RUNTIME) 'लाइन मौजूद कर सकते हैं? आप कैसे जानते हैं कि यह 'शून्य' देता है? क्या आप अपना इस्तेमाल कर कोड स्निपेट प्रदान कर सकते हैं? – sp00m

+1

बिल्कुल। जेडीके 1.7.0 के साथ काम करता है। –

+0

@ sp00m मैंने अपने आईडीई से कॉपी किया, RUNTIME उपलब्ध है। मुझे पता है कि यह बदबू आ रही है क्योंकि मैंने इसे डीबग किया था। मैं जेडीके 1.7.0 का उपयोग कर रहा हूँ। – Aquillo

उत्तर

5

मैं बस आप के लिए यह परीक्षण किया है, और यह सिर्फ काम करता है:

public class StackOverflowTest { 

    @Test 
    public void testName() throws Exception { 

     Annotation[] annotations = Obj.class.getDeclaredField("myField").getAnnotations(); 

     System.out.println(annotations[0]); 
    } 
} 

@Target(ElementType.FIELD) 
@Retention(RetentionPolicy.RUNTIME) 
@interface Searchable { 

} 

class Obj { 

    @Searchable 
    String myField; 
} 

मैं इसे भाग गया, और यह निम्नलिखित उत्पादन का उत्पादन:

@nl.jworks.stackoverflow.Searchable() 

आप में से ऊपर वर्ग चलाने की कोशिश कर सकते हैं अपने आईडीई? मैंने IntelliJ, openjdk-6 के साथ कोशिश की।

+0

यह काम करता है, धन्यवाद। आगे की समस्या की जांच करेंगे, आपको बताएंगे। – Aquillo

+1

मैं अपनी समस्या को फिर से उत्पन्न नहीं कर सकता, लेकिन इस मुद्दे को आपके उदाहरण की प्रतिलिपि बनाकर हल किया गया है और इसे मेरे मामले में वापस लाया गया है, धन्यवाद एरिक! – Aquillo

+0

निश्चित रूप से, कोई समस्या नहीं, खुश मैं मदद कर सकता था! –

2

आपका कोड सही है। समस्या कहीं और है। मैंने बस कॉपी किया और अपना कोड चलाया और यह काम करता है।

यह संभव है कि आप अपने कोड में गलत Obj कक्षा आयात कर रहे हैं, तो आप इसे पहले देखना चाहेंगे।

संबंधित मुद्दे