2012-06-01 47 views
3

這個問題不是關於如何使用Serializable,我已經知道了。但是,我不知道如何實現Serializable帶來了以下警告:

The serializable class MyClass does not declare a static final serialVersionUID field of type long

假設我想寫的界面像Serializable,我將如何去「警告」程序員實現我的接口來聲明一個變量?我試過尋找Serializable.java的源代碼,但是我找不到任何會導致這種行爲的東西。這甚至有可能嗎?

謝謝!Serializable如何工作?

回答

5

我認爲你正在尋找的行爲將使用註釋和批註處理器可以更好地實現。編譯器警告你關於不聲明serialVersionUID的事實由編譯器級別的不同機制處理(因此,程序員無法使用)。它更像是由序列化API執行的編碼約定,而不是實現接口的結果。

事實上,here您可以檢查的Serializable源代碼,你可以看到,有什麼特別的地方是爲迫使編譯器警告:

/* comments removed for brevity */ 
package java.io; 
public interface Serializable { 
} 
+1

謝謝!這就是我一直在尋找:) –

+0

註釋是真棒! –

4

不,我不認爲這是可能的僅僅是Java(可能有一些註釋?不確定)。

的事實是,Serializable接口不是一個普通的Java接口,但更多的是標記元件,它被用作接口但它的一些特別的東西,所以它是在以自己的方式由編譯器處理(其意思表示一種功能,如接口,默認情況下,在代碼中不會透明地實現)。

+2

是的,Java編譯器可能會做一些特殊的事情來打印該警告。我不認爲你可以用Java自己編寫任何類似的東西。 – Michael

+0

'Serializable'在語言和編譯器中有很多內置的魔法,你不能在普通的庫中複製。 –

+0

我認爲@Jack擊中了所有優點。內森,問題是你想要這個有多糟糕? [This](http://stackoverflow.com/q/1752607/845279)文章描述了一個可能的解決方案,即使它看起來像一個可怕的很多工作。請讓我們知道它是否工作。 – user845279