首頁 >Java >java教程 >為什麼 Java 介面不繼承註解?

為什麼 Java 介面不繼承註解?

Patricia Arquette
Patricia Arquette原創
2024-11-04 11:47:30990瀏覽

Why Don't Java Interfaces Inherit Annotations?

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn