繼承註解:介面排除
儘管註解類型帶有 Inherited 註解,但 Java 類別不會從實作的介面繼承註解。此行為源自於潛在的繼承衝突。
考慮以下範例:
@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) @Inherited public @interface Baz { String value(); } interface Foo { @Baz("baz") void doStuff(); } interface Bar { @Baz("phleem") void doStuff(); } class Flipp { @Baz("flopp") public void doStuff() {} } class MyClass extends Flipp implements Foo, Bar {}
透過反射存取註解時:
MyClass.class.getMethod("doStuff").getAnnotation(Baz.class).value();
結果變得不明確,因為註解沒有明確的繼承路徑。是「baz」、「phleem」還是「flopp」?
為了避免此類衝突並保持清晰度,Java 有意排除從介面繼承的註解。由於這種繼承限制,放置在介面方法上的註釋通常具有有限的實用性。
以上是為什麼 Java 類別不從介面繼承註解?的詳細內容。更多資訊請關注PHP中文網其他相關文章!