2013-12-23 3 views
1

Не уверен, что я здесь делаю неправильно. Моя цель - получить аннотацию метода (если существует).Java-аннотации вызывают исключение NullPointerException.

public class RunTest 
{ 
public static void main(String[] args) throws Exception, NoSuchMethodException 
{ 
    MyAction action = new MyAction(); 

    Method method = action.getClass().getDeclaredMethod("printSomething"); 

    RequiredPermission permission = method.getAnnotation(RequiredPermission.class); 
    String value = permission.permissionName(); 

    System.out.println("permission name: "+value); 

} 
} 

класс MyAction

public class MyAction 
{ 
@RequiredPermission(permissionName="SYSO", permissionValue = 0) 
public void printSomething() 
{ 
    System.out.println("hi there"); 
} 

public void printABC() 
{ 
    System.out.println("ABC..."); 
} 
} 

и аннотаций:

public @interface RequiredPermission 
{ 
    String permissionName(); 
    int permissionValue(); 
} 

я бы ожидал увидеть на консоли:

имя разрешения: SYSO

, но вместо этого я получаю:

Исключение в потоке "главный" java.lang.NullPointerException в com.annotation.RunTest.main (RunTest.java:14)

ответ

5

Аннотации должны иметь свою Политику хранения: RUNTIME, чтобы получить к ней доступ через отражение.

Добавьте следующие аннотации:

@Retention(RetentionPolicy.RUNTIME) 
public @interface RequiredPermission 
{ 
    String permissionName(); 
    int permissionValue(); 
} 
Смежные вопросы