為什么java類(lèi)不從已實(shí)現(xiàn)的接口繼承注釋?zhuān)课乙恢痹谑褂肎uice的AOP來(lái)攔截一些方法調(diào)用。我的類(lèi)實(shí)現(xiàn)了一個(gè)接口,我想注釋接口方法,以便Guice可以選擇正確的方法。即使注釋類(lèi)型使用Inherited annotation注釋?zhuān)瑢?shí)現(xiàn)類(lèi)也不會(huì)繼承Inherited的java doc中所述的注釋?zhuān)毫碚?qǐng)注意,此元注釋僅導(dǎo)致注釋從超類(lèi)繼承; 已實(shí)現(xiàn)接口上的注釋無(wú)效。這可能是什么原因?了解對(duì)象類(lèi)在運(yùn)行時(shí)實(shí)現(xiàn)的所有接口并不是一件難事,因此必須有充分的理由支持這一決策。
2 回答

素胚勾勒不出你
TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超9個(gè)贊
我會(huì)說(shuō)原因是否則會(huì)發(fā)生多重繼承問(wèn)題。
例:
@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.METHOD) @Inheritedpublic @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()
結(jié)果會(huì)是什么?'baz','phleem'或'flopp'?
因此,接口上的注釋很少有用。