使用用户定义的注释时获取java.lang.NullPointerException

时间:2015-04-19 09:37:11

标签: java annotations

我在执行以下方法时遇到空指针异常。我已调试并发现cons.getAnnotation(MyAssessment.class);正在返回null。请求帮助

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

enum GradeLevel { POOR, AVERAGE, GOOD, VERYGOOD, EXTRAORDINARY }

@interface MyAssessment {
    GradeLevel score();
}

public class Problem {

    @MyAssessment(score=GradeLevel.GOOD)
    public Problem(){
        System.out.println("This is a constuructor");
    }

    public static void main(String... args){

        try {
            Class c = new Problem().getClass();
            Constructor cons = c.getDeclaredConstructor();
            MyAssessment an = (MyAssessment) cons.getAnnotation(MyAssessment.class);
            System.out.println("YOUR SCORE IS : " + an.score());
        }
        catch(NoSuchMethodException nsme) {
            System.out.println("Constructor thrown exception");
        }
    }
}

3 个答案:

答案 0 :(得分:3)

默认情况下,注释在运行时不可用。您需要注释注释:P

@Retention(RetentionPolicy.RUNTIME)
@interface MyAssessment {

您还可以添加@TargetCONSTRUCTOR来表示它应该仅出现在构造函数中。

答案 1 :(得分:1)

您需要使用以下标注注释注释:

@Retention(RetentionPolicy.RUNTIME)

答案 2 :(得分:0)

您可以更改注释的保留策略。使用@Retention。