2010-02-18 18 views
25

İşte bir test dersi:Java: yansıma yoluyla ek açıklamalara erişemez

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(); 
     } 
    } 
} 

İşte benim çıktı:

method inspected ? myMethod 
annotation : null 
annotations length : 0 

Yansımalar aracılığıyla ek açıklamaların görünmesini sağlamak için neler kaçırdım?
Varlıklarını kontrol etmek için bile bir ek açıklama işlemcisine ihtiyacım var mı?

cevap

38

Aksi takdirde, ek açıklamalar bırakılır ve JVM bunların farkında değildir.
Daha fazla bilgi için, bkz. here.

+0

Teşekkürler bir demet! – glmxndr

+0

SINIF bekletme politikasının varsayılan davranışını RUNTIME olarak değiştirmenin bir yolu olup olmadığını bilmek ister misiniz? – glmxndr

+0

Bildiğim kadarıyla bu mümkün değil, ama yanılıyor olabilirim. – abyx

İlgili konular