一尘不染

为什么Java类不从实现的接口继承注释?

java

我一直在使用Guice的AOP来拦截一些方法调用。我的课程实现了一个接口,我想注释接口方法,以便Guice可以选择正确的方法。即使使用继承的注释对注释类型进行注释,实现类也不会继承Inherited的java doc中所述的注释:

还要注意,此元注释仅使注释从超类继承;已实现的接口上的注释无效。

这可能是什么原因?了解对象的类在运行时确实实现的所有接口并不是一件容易的事,因此在此决定背后必须有充分的理由。


阅读 662

收藏
2020-03-09

共1个答案

一尘不染

我要说的原因是,否则会发生多重继承问题。

例:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD) @Inherited
public @interface Baz { String value(); }

public interface Foo{
    @Baz("baz") void doStuff();
}

public interface Bar{
    @Baz("phleem") void doStuff();
}

public class Flipp{
    @Baz("flopp") public void doStuff(){}
}

public class MyClass extends Flipp implements Foo, Bar{}

如果我这样做:

MyClass.class.getMethod("doStuff").getAnnotation(Baz.class).value()

结果将是什么?’baz’,’phleem’或’flopp’?

因此,接口上的注释很少有用。

2020-03-09