2015-04-19 18 views
1

我在執行以下方法時收到空指針異常。我已調試並發現cons.getAnnotation(MyAssessment.class);正在返回null。普萊舍幫助在使用用戶定義的註釋時獲取java.lang.NullPointerException

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

註解是不是默認在運行時可用。您需要將您的註解註釋:P

@Retention(RetentionPolicy.RUNTIME) 
@interface MyAssessment { 

您還可以添加的@TargetCONSTRUCTOR說它應該只出現在構造函數。

1

您需要使用您的註解註釋:

@Retention(RetentionPolicy.RUNTIME) 
0

您可以更改註釋的保留策略。使用@Retention。

相關問題