я написал 3 класса "PrintDevice, принтер, Test", как следоватьПолучение java.lang.NullPointerException с Java аннотаций и отражения
Первое, PrintDevice.java
public @interface PrintDevice{
String defaultPrint();
int defaultNumber();
}
Во-вторых, 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);
}
}
В-третьих, 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());
}
}
и скомпилировать их без каких-либо проблем, но когда я пытаюсь запустить Test.java, я получил NullPointerExcetion следующим образом: -
Исключение в потоке «основной» java.lang.NullPointerException на Test.main (Test.java:7)
Точно, это работает, вы правы. – Scorpion
@OsamaElsayed Вы также можете добавить аннотацию '@ Target' в аннотацию, чтобы ограничить использование аннотации. –