如何在默认接口方法中读取实现类?

问题描述

我想创建一个默认接口方法,该方法可以使用实现类的带注释的值进行响应。

示例:在下面,我希望所有的Child实现都读取自己的@Generated值字段:

public interface Parent {
    default String[] find() {
        return AnnotationUtils.findAnnotation(this.getClass(),Generated.class).value();
    }
}

@Generated(value = {"test"})
public class Child implements Parent {

}

用法:

System.out.println(new Child().find());

结果:NullPointerException,因为调用试图在Parent接口类而不是实现类上找到注释。

还有可能吗?

解决方法

您的问题基于错误的前提。 this.getClass() does not return Parent

假设您的@Generated注释是javax version,您将获得NPE,因为它在运行时未保留。

请参见@Retention

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...