[英]How to invoke an interface's default implementation of a method in an overriding implementation?
[英]How to read the implementation class in default interface method?
我想创建一个默认接口方法,它可以响应实现 class 的注释值。
示例:在下面,我希望所有 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
接口 class 上查找注释,而不是在实现 class 上查找注释。
它仍然有可能以某种方式吗?
你的问题是基于一个错误的前提。 this.getClass()
不返回父级
假设您的@Generated
注释是javax 版本,您将获得一个 NPE,因为它在运行时没有保留。
请参阅@Retention
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.