java - 使用java注释和反射获取java.lang.NullPointerException

标签 java reflection nullpointerexception annotations

我编写了 3 个类“PrintDevice、Printer、Test”如下

首先,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 如下:-

Exception in thread "main" java.lang.NullPointerException at Test.main(Test.java:7)

最佳答案

您需要带有运行时保留策略的@Retention

@Retention(RetentionPolicy.RUNTIME)
public @interface PrintDevice{
    String defaultPrint();
    int defaultNumber();
}

否则注释在运行时不可用。

关于java - 使用java注释和反射获取java.lang.NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21168878/

相关文章:

java - 使用 Volley 库时出现 Android NullPointerException

java - 如何将 Neo4j 节点转换为蓝图顶点?

java - 长时间运行的 Windows 服务消耗内存

java - 有时缺少年份而有时不缺少年份时将字符串解析为日期

c# - 反射使HashCode不稳定

java - Java中的“特殊属性/属性”而不是getter/setter,以避免样板代码

java - MyEclipse 没有将链接源部署到 WEB-INF/classes

c# - 通过反射设置索引值给了我 TargetParameterCountException

java - Android Parcelable 对象传递给 Activity 但不传递给服务

java - 尝试从不同类传递 Color 参数时出现 NullPointerException