2011-09-07 31 views
1

java編譯器如何警告您未聲明serialVersionUID uid字段?有沒有一種方法可以爲定製界面做到這一點,或者是Java語言的魔力?未超載時發生Java可序列化警告屬性

編輯:

我的問題是沒有這麼多的Serializable接口,我理解這一點。但它是如何產生警告的?我想實現同樣的事情(警告如果實現我的接口的類不提供某個屬性),但我沒有看到關於如何序列化的任何事情。

回答

2

它不會警告你,它只會爲你默默生成serialVersionUID。但是,大多數IDE會在沒有此字段的情況下觸發Serializable類的警告(出於某種原因)。

參見:Use the serialVersionUID or suppress warnings?

1

我不太清楚你的要價。這是Serializable接口的一個特性,我認爲它與Eclipse的代碼樣式選項(或者你使用的任何IDE)結合在一起,產生了這個警告。如果您在代碼樣式選項下進行選擇(通常會給您一些警告,因此IDE可以幫助您保持代碼清潔),但我認爲您會找到生成此警告的選項。

如果您想知道,警告的目的是使用serialVersionUID來唯一標識序列化對象。當你的代碼試圖對這個對象進行反序列化時(比如說,從一個文件中),如果你在Java中使用標準的序列化技術,當你試圖去串行化的類的serialVerionUID時,JVM會引發一個錯誤,與編輯的類文件中的不匹配。它是JVM加載包含給定對象/數據結構的先前/替代版本的序列化對象的一種方式。

1

正如其他答案說,您正在尋找的警告是非常具體的Serializable

通常,接口不能指定實現它的類中應存在哪些字段。這實際上是基本的OO設計 - 一個領域是實現,而不是接口。

爲了您的需要,也許最好在界面中有一個方法,getTheField()。然後需要實現該接口的類來實現該方法。他們可能會或可能不會通過使用專用字段來存儲數據,但這似乎是一個內部實現細節,這對調用者來說應該不重要。

相關問題