2013-07-28 9 views
31

मैं इस तरह अपने ही टिप्पणी का प्रकार बनाया है:जावा में कक्षा एनोटेशन कैसे प्राप्त करें?

public @interface NewAnnotationType {} 

और एक वर्ग के लिए यह संलग्न:

@NewAnnotationType 
public class NewClass { 
    public void DoSomething() {} 
} 

और मैं इस तरह प्रतिबिंब के माध्यम से वर्ग एनोटेशन प्राप्त करने की कोशिश:

Class newClass = NewClass.class; 

for (Annotation annotation : newClass.getDeclaredAnnotations()) { 
    System.out.println(annotation.toString()); 
} 

लेकिन यह कुछ भी प्रिंट नहीं कर रहा है। मैं क्या गलत कर रहा हूं?

+1

तो एक एनोटेशन संकलन समय पर ही उपलब्ध है। –

उत्तर

38

डिफ़ॉल्ट अवधारण नीति RetentionPolicy.CLASS जिसका अर्थ है कि, डिफ़ॉल्ट रूप से, एनोटेशन जानकारी रनटाइम पर नहीं बनी रहती है है:

एनोटेशन संकलक द्वारा वर्ग फ़ाइल में दर्ज किया जाना जाता है, लेकिन द्वारा बनाए रखा होने की जरूरत नहीं रन टाइम पर वीएम। यह पहले गलत व्यवहार है।

इसके बजाय, RetentionPolicy.RUNTIME का उपयोग करें:

एनोटेशन संकलक द्वारा वर्ग फ़ाइल में दर्ज की गई और रन टाइम पर वीएम अपने पास रख लिए हैं, इसलिए वे संजीदगी से पढ़ा जा सकता है।

... जो आप @Retention meta-annotation का उपयोग कर निर्दिष्ट करें: जब तक स्पष्ट रूप से चिह्नित

@Retention(RetentionPolicy.RUNTIME) 
public @interface NewAnnotationType { 
} 
+0

ठीक है, क्या इसे बदलने का कोई तरीका है? पुनर्निर्माण के बाद –

+1

यह काम करता है :) धन्यवाद –

+1

[यह मेरे लिए काम करता है।] (Http://ideone.com/AMTHsM) –

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