2012-11-04 181 views
8

枚舉被認爲是單身人士的最佳方式,其中一個原因是它隱含地繼承了Serializable枚舉,單身和反序列化

但是枚舉如何防止單例的反序列化問題?

+0

Enum是一個單例,但是單例的反序列化有什麼問題? – clinton

+2

@clinton:如果你創建一個單例可序列化的,並且不關心它是如何被反序列化的,那麼每當它被反序列化時,你就會得到一個單例的新實例,這將打破它的單例。 –

+0

@JBNizet感謝您的信息。在此之前,我還沒有就單身人士問題提出過這個問題。或者它可能沒有讓我感到如此重要。 – clinton

回答

1

序列化作爲使用單例枚舉的參數是無稽之談。

如果枚舉單例是有狀態的,則在序列化/反序列化期間狀態將丟失。

如果單身人士是無國籍人士,誰關心其身份?

+0

如果單例是無狀態的,並且代碼使用(例如)if(someVar == SomeSingleton.INSTANCE)',那麼您真的關心它的身份。 –

+0

沒有真實世界的用例。 Jushua集團製作了這個東西。通常單身不應該是可序列化的,使用枚舉來方便序列化是錯誤的。另外,singleton是一種實現策略,而不是我們應該在界面上公佈的內容。 – irreputable