Java 介面中的註解繼承
註解繼承,由 @Inherited 註解表示,允許註解從超類別傳播到子類別。然而,此規則的一個值得注意的例外是,已實作介面上的註解不會由實作類別繼承。
根據@Inherited 的文檔,「此元註釋僅導致註釋從超類繼承;註釋對實現的介面沒有影響。」
非繼承背後的原因
此設計決策可以防止類別使用相同衝突註解實現多個介面的情況下發生繼承衝突。考慮以下範例:
<code class="java">@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 MyClass implements Foo, Bar{}</code>
如果註解是從介面繼承的,則哪個 @Baz 值會與 MyClass.doStuff() 方法關聯? “baz”,“phleem”,還是其他什麼?
實際影響
介面上的註解繼承通常被認為是不常見和不切實際的,因為潛在的衝突和當多個介面指定衝突的註釋時,很難確定正確的註解。建議依賴超類別上的註解或在依賴注入框架中使用替代機制進行方法攔截。
以上是為什麼 Java 介面不繼承註解?的詳細內容。更多資訊請關注PHP中文網其他相關文章!