3 回答

TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超6個(gè)贊
在Java的早期版本中,標(biāo)記接口是聲明有關(guān)類(lèi)的元數(shù)據(jù)的唯一方法。例如,可序列化標(biāo)記接口使類(lèi)的作者可以說(shuō),他們的類(lèi)在進(jìn)行序列化和反序列化時(shí)將表現(xiàn)正確。
在現(xiàn)代Java中,標(biāo)記接口沒(méi)有位置。它們可以完全由Annotations代替,從而具有非常靈活的元數(shù)據(jù)功能。如果您具有有關(guān)類(lèi)的信息,并且該信息永不改變,則注釋是表示它的非常有用的方法。

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超8個(gè)贊
Joshua Bloch:有效的Java 2nd Edition,第179頁(yè)
條目37:使用標(biāo)記界面定義類(lèi)型
...您可能會(huì)聽(tīng)到說(shuō)標(biāo)記注釋?zhuān)?xiàng)目35)使標(biāo)記接口過(guò)時(shí)的消息。該斷言是不正確的。標(biāo)記接口相對(duì)于標(biāo)記注釋具有兩個(gè)優(yōu)點(diǎn)。首先,標(biāo)記器接口定義一種由標(biāo)記的類(lèi)的實(shí)例實(shí)現(xiàn)的類(lèi)型。標(biāo)記注釋沒(méi)有。這種類(lèi)型的存在使您能夠在編譯時(shí)捕獲直到使用運(yùn)行時(shí)便無(wú)法捕獲的錯(cuò)誤,前提是您使用了標(biāo)記批注...。
就我個(gè)人而言,我認(rèn)為我將向約書(shū)亞(Joshua)在該主題上的豐富知識(shí)致敬。

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超5個(gè)贊
它表明該類(lèi)(因此不是瞬態(tài)的所有字段)都是序列化的候選對(duì)象。而且,如果您要構(gòu)建依賴(lài)于序列化的框架,那么您當(dāng)然可以編寫(xiě)一種方法:
public void registerObject(Serializable obj);
限制您準(zhǔn)備接受的課程。
因?yàn)樾蛄谢膶?duì)象需要保持跨系統(tǒng)的兼容性,所以序列化是一個(gè)明確的設(shè)計(jì)決策,因此需要使用標(biāo)記接口來(lái)標(biāo)識(shí)這些候選對(duì)象。
還有一個(gè)安全方面。您不想使所有內(nèi)容都可序列化-否則您可能會(huì)意外地通過(guò)序列化公開(kāi)(例如)密碼或其他敏感數(shù)據(jù)。
添加回答
舉報(bào)