2009-04-08 17 views
18

काम नहीं कर रहा है, मैं जावा एनोटेशन का उपयोग करने की कोशिश कर रहा हूं, लेकिन ऐसा लगता है कि मेरा कोड यह पहचानने के लिए नहीं है कि कोई मौजूद है। मैं क्या गलत कर रहा हूँ?जावा एनोटेशन

import java.lang.reflect.*; 
    import java.lang.annotation.*; 

    @interface MyAnnotation{} 


    public class FooTest 
    { 
    @MyAnnotation 
    public void doFoo() 
    {  
    } 

    public static void main(String[] args) throws Exception 
    {    
     Method method = FooTest.class.getMethod("doFoo"); 

     Annotation[] annotations = method.getAnnotations(); 
     for(Annotation annotation : method.getAnnotations()) 
      System.out.println("Annotation: " + annotation ); 

    } 
    } 
+0

आप अप्रयुक्त 'एनोटेशन' स्थानीय चर या उपयोग को दूर करने के कोड को संपादित करना चाह सकते हैं {... – blank

उत्तर

34

आप एनोटेशन इंटरफेस पर @Retention एनोटेशन का उपयोग कर एक रनटाइम एनोटेशन होने के रूप में एनोटेशन निर्दिष्ट करने के लिए की जरूरत है।

अर्थात

@Retention(RetentionPolicy.RUNTIME) 
@interface MyAnnotation{} 
23

लघु जवाब: अगर आप अपनी टिप्पणी के लिए परिभाषा @Retention (RetentionPolicy.RUNTIME) जोड़ने की जरूरत है।

स्पष्टीकरण:

एनोटेशन डिफ़ॉल्ट नहीं संकलक द्वारा रखा द्वारा कर रहे हैं। वे बस रनटाइम पर मौजूद नहीं हैं। यह पहली बार मूर्खतापूर्ण लग सकता है, लेकिन कई एनोटेशन हैं जिनका उपयोग केवल कंपाइलर (@ ओवरराइड) या विभिन्न स्रोत कोड विश्लेषकों (@ दस्तावेज, आदि) द्वारा किया जाता है।

यदि आप वास्तव में अपने उदाहरण में प्रतिबिंब के माध्यम से एनोटेशन का उपयोग करना चाहते हैं, तो आपको जावा को यह जानना होगा कि आप कक्षा फ़ाइल में उस एनोटेशन का नोट बनाना चाहते हैं। यही कारण है कि नोट इस तरह दिखता है:

@Retention(RetentionPolicy.RUNTIME) 
public @interface MyAnnotation{} 

अधिक जानकारी के लिए आधिकारिक डॉक्स 1 की जाँच और विशेष रूप से RetentionPolicy के बारे में थोड़ा ध्यान दें।

3

@Retention(RetentionPolicy.RUNTIME) का उपयोग करें नीचे दिए गए कोड की जांच करें। यह मेरे लिए काम कर रहा है: (एनोटेशन एनोटेशन: एनोटेशन) के लिए:

import java.lang.reflect.*; 
import java.lang.annotation.*; 

@Retention(RetentionPolicy.RUNTIME) 
@interface MyAnnotation1{} 

@Retention(RetentionPolicy.RUNTIME) 
@interface MyAnnotation2{} 

public class FooTest { 
    @MyAnnotation1 
    public void doFoo() { 
    } 

    @MyAnnotation2 
    public void doFooo() { 
    } 

    public static void main(String[] args) throws Exception { 
     Method method = FooTest.class.getMethod("doFoo"); 
     for(Annotation annotation : method.getAnnotations()) 
      System.out.println("Annotation: " + annotation ); 

     method = FooTest.class.getMethod("doFooo"); 
     for(Annotation annotation : method.getAnnotations()) 
      System.out.println("Annotation: " + annotation ); 
    } 
} 
संबंधित मुद्दे