如果我想讓我的應用中的所有對象都可序列化,爲什麼不能避免這種情況呢?爲什麼需要使用標記接口來序列化對象?
更新:我知道有些類不能序列像線程但Java系統知道還該線程不是序列化的,爲什麼沒有自動管理呢?
我想知道,如果有一些根本性的原因。
如果我想讓我的應用中的所有對象都可序列化,爲什麼不能避免這種情況呢?爲什麼需要使用標記接口來序列化對象?
更新:我知道有些類不能序列像線程但Java系統知道還該線程不是序列化的,爲什麼沒有自動管理呢?
我想知道,如果有一些根本性的原因。
爲什麼不能避免這種情況,如果我想我的應用程序中的所有對象都是可序列化的?
簡單,因爲這是方式Java序列化工作。
考慮,這沒有任何意義連載所有的對象。
Thread
實例和大多數Stream
類的實例包括無法序列化的臨界狀態。因此,如果應用程序員應該如何控制序列化?他如何阻止各種不必要的東西被偶然序列化?答:通過聲明他想要序列化的類作爲實現Serializable
。
是的,但java系統知道線程是不可序列化的,爲什麼不自動管理它? – user310291 2010-10-30 11:46:02
我怎麼會偶然序列化,因爲我必須將方法寫入我想要序列化的對象?我的意思是我必須兩次做這個工作,這不符合KISS原則? – user310291 2010-10-30 11:47:12
1)實際上,它沒有。或者更確切地說,它只知道這個,因爲Thread沒有實現Serializable。 2)如果在某些情況下忘記了對象A可能包含對對象B的引用。 – 2010-10-30 11:48:07
如果您自己實現所有與序列化相關的代碼,則不需要它,但只要使用標準庫函數執行操作,就必須通過某種方式進行通信,即說明您的類已設計好並可以序列化。僅僅因爲程序中的所有類都是可序列化的,並不意味着它們在其他程序中。
因爲這是語言設計的方式?像這樣的問題從根本上說是毫無意義的。如果所有的類都是可序列化的,那將是可能的,而且確實更容易一些,但是並不是那樣做的。有很多原因,爲什麼沒有,並且他們在一些常見問題解答或高斯林採訪中被提供,我在12年前閱讀過。安全當然是其中之一。但在這個階段,這真的是徒勞的討論。
並且這樣的回答也沒有意義。這種語言可能是以這種方式設計的,只是因爲團隊沒有時間來整合這個版本或者基本原因。 – user310291 2010-10-31 10:48:25
看來其他人想知道所以不要把你的意見理所當然。 – user310291 2010-10-31 10:53:45
但是沒有時間。這只是你的意見。爲什麼需要更多時間做更少的工作?這是一個深思熟慮的設計決定,它被記錄在案。某處。但事實就是如此,就是這樣。不只是'我的意見'。 – EJP 2010-11-01 00:45:35
我已經編輯了某人的幫助較小回答的反應。請記住,有些程序員有很大的自我意識,所以忽略它們。它最好是降低或標誌爲冒犯並繼續前進。 – Juliet 2010-11-01 14:13:38