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

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

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

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

回答:

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

例:

@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’?

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

以上是 为什么Java类不从实现的接口继承注释? 的全部内容, 来源链接: utcz.com/qa/425661.html

回到顶部