在实现和覆盖该方法后如何保留接口默认方法的注释

时间:2020-07-15 13:31:57

标签: java annotations java-stream overriding

当我覆盖带注释的接口的默认方法时,该注释将从子方法中删除。我想在子方法中保留注释,即使方法被覆盖也是如此。它被删除的原因是什么?

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:我尝试搜索,但是在搜索中具有覆盖和注释的结果为覆盖的注释提供了结果。

0 个答案:

没有答案