4 回答

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超10個(gè)贊
您清楚地了解標(biāo)記接口的作用。你自己也這么說啊!
那么為什么我們還需要它們呢?
從某種意義上說,我們不需要它們。任何可以用標(biāo)記接口表達(dá)的東西都可以用注釋來表達(dá)。毫無疑問,注釋是解決問題的一種更簡潔的方法。
我們(仍然)擁有標(biāo)記接口的根本原因是歷史:
Java 注釋是在 Java 5.0 中添加到 Java 語言中的。在此之前,標(biāo)記接口是可用的最佳解決方案。
從類中刪除標(biāo)記接口會(huì)破壞二進(jìn)制兼容性。
有少量 Java SE 標(biāo)記接口早于 Java 5.0,并廣泛用于用戶代碼中。我想到的兩個(gè)是
Serializable
和Cloneable
。
無論我們喜歡與否,Java 都有標(biāo)記接口,而且這一點(diǎn)不太可能改變。
標(biāo)記界面沒有多大意義,在我看來顯然不是一個(gè)好的設(shè)計(jì)。
嗯,是。從2019年的角度來看,確實(shí)如此。
從 1997 年的角度來看,當(dāng)時(shí) Java 還很新,C# 也已經(jīng)面世 5 年了,唯一具有注釋之類的主流語言是 LISP 版本。
現(xiàn)在我非常確定,早在 Java 1.0 時(shí)代,Java 類庫的設(shè)計(jì)者就意識(shí)到標(biāo)記接口是一個(gè)有缺陷的想法。但他們別無選擇。它是使用標(biāo)記接口,或者將一些漂亮的 Java 基礎(chǔ) API 的設(shè)計(jì)和實(shí)現(xiàn)推遲 5 年或更長時(shí)間。
在企業(yè)計(jì)算領(lǐng)域,您需要做出妥協(xié)才能完成工作。

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超8個(gè)贊
您不需要實(shí)現(xiàn) Serialized 來進(jìn)行序列化,也不需要實(shí)現(xiàn) Cloneable 來進(jìn)行克隆。這些接口的要點(diǎn)在于,Java 內(nèi)置了用于克隆和序列化的機(jī)制,如果您希望使用這些內(nèi)置機(jī)制,則只需實(shí)現(xiàn)這些接口即可。
因此,只需實(shí)現(xiàn) Serialized,您就可以自動(dòng)將該類與 ObjectInputStream 和 ObjectOutputStream 一起使用,而無需任何額外的代碼。
另一方面,我發(fā)現(xiàn)可克隆幾乎毫無用處。通常,您只需實(shí)現(xiàn) Cloneable 并覆蓋Object.clone
并將其公開,然后您就可以立即進(jìn)行克隆。但據(jù)說它被破壞了,你最好只編寫自己的克隆邏輯,就像使用復(fù)制構(gòu)造函數(shù)一樣。

TA貢獻(xiàn)1893條經(jīng)驗(yàn) 獲得超10個(gè)贊
我可以回答你的部分問題 - java中標(biāo)記接口的意義是什么?
通過引入注解,Java 為我們提供了一種替代方法來實(shí)現(xiàn)與標(biāo)記接口相同的結(jié)果。此外,與標(biāo)記接口一樣,我們可以將注釋應(yīng)用于任何類,并且可以將它們用作執(zhí)行某些操作的指示符。
那么關(guān)鍵的區(qū)別是什么?
與注釋不同,接口允許我們利用多態(tài)性。因此,我們可以向標(biāo)記接口添加額外的限制。
例如,讓我們添加一個(gè)限制,即只能從數(shù)據(jù)庫中刪除 Shape 類型:
public interface Shape {
double getArea();
double getCircumference();
}
在這種情況下,我們的標(biāo)記界面(我們稱之為 DeletableShape)將如下所示:
public interface DeletableShape extends Shape {
}
然后我們的類將實(shí)現(xiàn)標(biāo)記接口:
public class Rectangle implements DeletableShape {
// implementation details
}
因此,所有DeletableShape 實(shí)現(xiàn)也是 Shape 實(shí)現(xiàn)。顯然,我們不能使用注釋來做到這一點(diǎn)。
然而,每個(gè)設(shè)計(jì)決策都需要權(quán)衡,多態(tài)性可以用作針對(duì)標(biāo)記接口的反駁。在我們的示例中,每個(gè)擴(kuò)展 Rectangle 的類都會(huì)自動(dòng)實(shí)現(xiàn) DeletableShape。
這可能無法提供您想要的確切答案。但可以部分幫助你。

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超9個(gè)贊
任何類都可以實(shí)現(xiàn)它而無需添加任何額外的方法/字段/開銷
您只需標(biāo)記類即可使用/序列化
即使在 Java 5.0 引入注釋之后,
仍然還有@Configuration標(biāo)記注釋
@Configuration注解用于基于Spring注解的配置。@Configuration 是一個(gè)標(biāo)記注釋,它指示一個(gè)類聲明一個(gè)或多個(gè) @Bean 方法,并且可以由 Spring 容器處理以在運(yùn)行時(shí)生成 bean 定義和這些 bean 的服務(wù)請(qǐng)求
添加回答
舉報(bào)