Get in this in(线程中的异常" main" java.lang.NullPointerException)注释示例

时间:2014-05-21 19:28:18

标签: java annotations

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)

2 个答案:

答案 0 :(得分:1)

您还需要在运行时保留注释。当您指定RetentionPolicy.CLASS时,这不会像文档所说的那样完成:

  

注释将由编译器记录在类文件中但是   VM无需在运行时保留。

因此请将其更改为@Retention(RetentionPolicy.RUNTIME)

答案 1 :(得分:1)

VM在运行时不保留CLASS RetentionPolicy。你可以用

@Retention(RetentionPolicy.RUNTIME)