2010-09-17 117 views
0

我有一個帶有序列化枚舉類的分佈式系統,常量可能隨系統不同而不同。枚舉和值的Java反序列化

因爲這些類可能不同,所以可能會在不存在的常量上反序列化時調用valueOf,從而拋出運行時異常。

我不認爲valueOf可以重寫,或者在反序列化過程中調用valueOf之前自定義插入的另一個方法。

有沒有辦法避免與枚舉的這個問題?

+0

我認爲你並不完全清楚你想要做什麼:你是否想將序列化對象中的給定值反序列化爲取決於某些外部環境的不同枚舉? – 2010-09-17 18:24:16

+0

您是否考慮過爲其添加自定義靜態方法?你讓它聽起來像Enum類的問題(甚至是缺陷),但事實並非如此。問題是不一致的常量。 – 2010-09-17 18:25:44

+0

我正在尋找防止反序列化在對不存在的常量調用valueOf時炸燬。 – Dirk 2010-09-17 18:27:09

回答

5

主要問題是,您的分佈式系統上的內容不一致導致枚舉。最好的辦法是先看這個。

姑息性的做法是在您的敏感類中使用readObject()方法,並將錯誤的枚舉值捕獲到錯誤的枚舉值。

+0

謝謝 - 我現在正在閱讀readObject() - 這是在valueOf之前在反序列化之前調用的? – Dirk 2010-09-17 18:30:58

+0

這是一種用於重寫對象反序列化的方法。 – 2010-09-17 18:37:11

+0

這會是一個問題嗎? 「序列化枚舉常量的過程不能自定義:在序列化和序列化過程中,由枚舉類型定義的任何類特定的writeObject,readObject ...都會被忽略」http://download.oracle.com/javase/6/docs/ platform/serialization/spec/serial-arch.html – Dirk 2010-09-17 20:06:09