介面中的註解繼承排除:深思熟慮的設計決策
在 Java 中,類別不會從實作的介面繼承註解。 Java 文件中針對 Inherited 註解明確提到了這項排除:介面上的註解沒有任何效果。
此決定背後的原因是為了防止繼承衝突和歧義。考慮以下範例:
<code class="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() {} } public class MyClass extends Flipp implements Foo, Bar {}</code>
如果介面可以繼承註釋,那麼MyClass 中的doStuff 方法將繼承兩個衝突的註釋,來自Foo 的@Baz("baz") 和來自Foo 的@Baz( "phleem")酒吧。這會在系統中產生歧義,導致不清楚應該應用哪個註釋。
此外,實作的介面上的註解會引入多重繼承問題。由於 Java 不支援類別層級的多重繼承,因此允許繼承介面的註解將有效地建立一種多重繼承的形式。這可能會導致更複雜的場景和潛在的衝突。
因此,決定從介面中排除註解繼承是為了保持清晰度、避免衝突並防止 Java 程式語言實作中的潛在問題。
以上是為什麼Java不允許介面繼承註解?的詳細內容。更多資訊請關注PHP中文網其他相關文章!