簡體   English   中英

Marker接口和空接口之間的區別?

[英]Difference between Marker interface and empty interface?

每個Marker接口都是一個空接口。 反之亦然嗎?

每個Marker接口都是一個空接口。 反之亦然嗎?

不。 在任何有用的意義上,沒有意義的空接口都不是標記接口。 標記器接口必須表示一些有關實現它的類的有意義東西

而且,實際上,根據某些定義,(混合)標記接口可以包含方法(請參見下面的Wikipedia定義)。 因此,標記器接口不一定是空接口。


@Sudheep Vallipoyil在回答中說。

1)無法創建用戶定義的標記界面。

我不同意。 這是基於“標記接口”的狹窄定義,而不是普遍接受的定義。

相比之下,這是Wikipedia如何定義“標記界面”和相應的設計模式。

“標記接口模式是計算機科學中的一種設計模式,與提供有關對象的運行時類型信息的語言一起使用。它提供了一種方法,可以將元數據與該語言不明確支持此類的類相關聯。”

要使用這種模式,一個類實現一個標記器接口(也稱為標記接口),並且與該類的實例進行交互的方法將測試該接口的存在。而典型的接口則指定了功能(以方法聲明的形式)實現類必須支持的,而標記接口則不必這樣做。僅存在這樣的接口就表示實現類方面的特定行為,混合接口既可以充當標記,又可以指定所需的方法,但是可能如果使用不當,會造成混亂。”

約書亞·布洛赫(Joshua Bloch)的第二個定義是:

“標記器接口是一種不包含方法聲明的接口,而只是指定(或“標記”)一個實現該接口具有某些屬性的類。

如您所見,在正常接受的用法中 ,術語“標記接口”不是為JVM定義的接口保留的。 任何人都可以定義一個。

也可以看看:

乍一看,如果接口不包含任何成員,並且可以用來向JVM指示實現類的運行時行為,則可以將其稱為標記接口。 每個空接口都不是標記接口,因為

1)無法創建用戶定義的標記界面

2)您正在編寫的空接口仍然可以擴展任何其他不為空的接口(然后,即使該空接口具有某些繼承的成員)。

最好理解一下,就像使用標記接口代替了Java 5中的注釋一樣(由此您可以了解標記接口的含義)。

這個答案是對@Stephen C的評論

1,問題不是什么是Marker接口模式(就像問什么是迭代器和什么是迭代器模式)

2. Wiki定義適用於“標記界面設計模式”,而不適用於Java中的標記界面概念

3從Joshua的有效Java中可以找到標記接口的以下定義

“標記器接口是不包含方法聲明的接口,而僅指定(或“標記”)一個實現該接口具有某些屬性的類。”

他還解釋了為什么完整保留一個空接口的Set(集合框架起作用)不是Marker接口。

我不認為答案應該類似於從Wiki復制一些定義並解釋相同的內容(那也是無關的一個內容!)

你的失誤!!! 我不知道您從哪里得到這些信息? 從Java SE 7程序員學習指南中提到,“接口是一組公共方法,必須由使用該接口的類來實現。”接口是接口,如果已更改,則應在此類書中閱讀以上。 如果像Cloneable這樣的接口沒有公共方法,則意味着它沒有公共方法,但是實現該接口的任何類都必須將Object.clone()實現為公共。 這是什么意思!!! 請不要將簡單的事情變成復雜的討論,尤其是在采訪中!!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM