2015-04-19 2 views
1

Я получаю исключение нулевого указателя при выполнении следующего метода. Я отлаживал и обнаружил, что cons.getAnnotation(MyAssessment.class); возвращает null. Plese помочьПолучение 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 { 

Вы также можете добавить @Target, скажем CONSTRUCTOR сказать, что должно появляться только на конструкторах.

1

Вы должны аннотировать аннотацию с:

@Retention(RetentionPolicy.RUNTIME) 
0

Вы можете изменить политику хранения аннотации. Использование @Retention.

Смежные вопросы