2010-02-18 7 views
25

यहां एक टेस्ट क्लास है:जावा: प्रतिबिंब के माध्यम से एनोटेशन तक नहीं पहुंच सकता है

import java.lang.annotation.Annotation; 
import java.lang.reflect.Method; 

public class TestAnnotations { 

    @interface Annotate{} 

    @Annotate public void myMethod(){} 

    public static void main(String[] args) { 
     try{ 
      Method[] methods = TestAnnotations.class.getDeclaredMethods(); 
      Method m = methods[1]; 
      assert m.getName().equals("myMethod"); 

      System.out.println("method inspected ? " + m.getName()); 
      Annotation a = m.getAnnotation(Annotate.class); 
      System.out.println("annotation ? " + a); 
      System.out.println("annotations length ? " 
       + m.getDeclaredAnnotations().length); 
     } 
     catch(Exception e){ 
      e.printStackTrace(); 
     } 
    } 
} 

यहां मेरा आउटपुट है:

method inspected ? myMethod 
annotation : null 
annotations length : 0 

प्रतिबिंब के माध्यम से टिप्पणियां देखने के लिए मुझे क्या याद आ रही है?
क्या मुझे अपनी उपस्थिति की जांच करने के लिए भी एक एनोटेशन प्रोसेसर चाहिए?

उत्तर

38

रनटाइम पर एनोटेशन तक पहुंचने के लिए, इसे रनटाइम की अवधारण नीति की आवश्यकता है।

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

अन्यथा, टिप्पणियां गिरा दी गई हैं और JVM उनसे अवगत नहीं है।
अधिक जानकारी के लिए, here देखें।

+0

धन्यवाद एक गुच्छा! – glmxndr

+0

क्या मैं पूछ सकता हूं, अगर आपको पता चल जाए कि क्लास प्रतिधारण नीति के डिफ़ॉल्ट व्यवहार को RUNTIME में बदलने का कोई तरीका है या नहीं? – glmxndr

+0

जहां तक ​​मुझे पता है कि यह संभव नहीं है, लेकिन मैं गलत हो सकता हूं। – abyx

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