当我覆盖带注释的接口的默认方法时,该注释将从子方法中删除。我想在子方法中保留注释,即使方法被覆盖也是如此。它被删除的原因是什么?
MyAnnotation.java
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyAnnotation {
public String config();
}
MyInterface,java
public interface MyInterface {
@MyAnnotation(config="myConfig")
public default String getMyVal() {
return null;
}
@MyAnnotation(config="myConfig")
public default String getMyVal2() {
return null;
}
}
MyModel.java
public class MyModel implements MyInterface {
@Override
public String getMyVal() {
return "MyVal";
}
}
MainRunner.java
public class MainRunner {
public static void main(String[] args) {
Arrays.stream(MyModel.class.getMethods()).forEach(
method -> Arrays.stream(method.getAnnotations()).forEach(ann-> System.out.println(method + " --- " + ann.annotationType()))
);
}
}
输出
公共本机int java.lang.Object.hashCode()-接口 jdk.internal.HotSpotIntrinsicCandidatepublic final本机 java.lang.Class java.lang.Object.getClass()-接口 jdk.internal.HotSpotIntrinsicCandidate public final native void java.lang.Object.notify()-接口 jdk.internal.HotSpotIntrinsicCandidate public final native void java.lang.Object.notifyAll()-接口 jdk.internal.HotSpotIntrinsicCandidate公共默认java.lang.String com.javaconcepts.annotations.MyInterface.getMyVal2()-接口 com.javaconcepts.annotations.MyAnnotation
感谢帮助。谢谢。
PS:我尝试搜索,但是在搜索中具有覆盖和注释的结果为覆盖的注释提供了结果。