import java.lang.annotation.*;
import java.lang.reflect.*;
@Retention(RetentionPolicy.CLASS)
@interface MyAnno{
String str();
int val();
}
public class Meta {
@MyAnno(str ="Annotation Example",val=100)
public static void myMeth(){
Meta ob = new Meta();
try{
Class c = ob.getClass();
Method m = c.getMethod("myMeth");
MyAnno anno = m.getAnnotation(MyAnno.class );
System.out.println(anno.str()+" "+anno.val());
}catch (NoSuchMethodException exc){
System.out.println("Method not found");
}
}
public static void main(String[] args) {
myMeth();
}
}
在运行此程序时获取此空指针异常,是否可以解释为什么以及如何捕获此异常并最终修复此代码?
Exception in thread "main" java.lang.NullPointerException
at Meta.myMeth(Meta.java:19)
at Meta.main(Meta.java:25)
答案 0 :(得分:1)
您还需要在运行时保留注释。当您指定RetentionPolicy.CLASS
时,这不会像文档所说的那样完成:
注释将由编译器记录在类文件中但是 VM无需在运行时保留。
因此请将其更改为@Retention(RetentionPolicy.RUNTIME)
答案 1 :(得分:1)
VM在运行时不保留CLASS
RetentionPolicy
。你可以用
@Retention(RetentionPolicy.RUNTIME)