Sco*_*ion 0 java reflection annotations nullpointerexception
我写了3个类"PrintDevice,Printer,Test"如下
首先,PrintDevice.java
public @interface PrintDevice{
String defaultPrint();
int defaultNumber();
}
Run Code Online (Sandbox Code Playgroud)
第二,Printer.java
@PrintDevice(defaultPrint="print",defaultNumber=5)
public class Printer{
public Printer(){
//empty Construcutor
}
@PrintDevice(defaultPrint="print",defaultNumber=5)
public void print(int number){
System.out.println(number);
}
}
Run Code Online (Sandbox Code Playgroud)
第三,Test.java
import java.lang.reflect.*;
public class Test{
public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException{
Printer printer = new Printer();
PrintDevice anno = printer.getClass().getAnnotation(PrintDevice.class);
Method m = printer.getClass().getMethod(anno.defaultPrint(),int.class);
m.invoke(printer,anno.defaultNumber());
}
}
Run Code Online (Sandbox Code Playgroud)
并且没有任何问题地编译它们,但是当我尝试运行Test.java时,我得到NullPointerExcetion如下: -
Test.main中线程"main"java.lang.NullPointerException中的异常(Test.java:7)
您需要@Retention具有运行时保留策略
@Retention(RetentionPolicy.RUNTIME)
public @interface PrintDevice{
String defaultPrint();
int defaultNumber();
}
Run Code Online (Sandbox Code Playgroud)
否则注释在运行时不可用.
| 归档时间: |
|
| 查看次数: |
656 次 |
| 最近记录: |