爲什麼只有Serializable
標記接口,並且不需要通過合同實現readObject()
和writeObject()
。它會更有意義嗎?爲什麼Serializable接口不需要實現readObject()和writeObject()
0
A
回答
2
序列化機制能夠在沒有任何readObject()
和writeObject()
方法的情況下序列化對象。但它需要你指定它可以或不可以序列化的對象。一些對象保存數據,這是有意義的序列化。其他一些則沒有。例如,序列化字符串是有意義的,但是序列化Socket或數據庫連接不會。 所以你簡單地通過讓他們的類實現Serializable接口來標記哪些對象可以被序列化。
如果您想要更多地控制對象的狀態被序列化和反序列化的方式,那麼您可以使用這兩種方法。
+0
但是,如果至少需要空方法實現這些方法,而不是冒着程序員在添加'read/writeObject'時忘記私有訪問修飾符或者沒有被編譯器強制執行而失敗的錯誤,在運行時默默地?這背後的動機是不是通過具有相同安全問題的對象api暴露這些方法? –
+1
問題是接口迫使類定義公共方法。他們不能強迫班級去定義私人班級。而這些方法不應該公開。無論如何,如果這些方法很重要,應該使用單元測試。 –
相關問題
- 1. 類實現Serializable接口不能的readObject
- 2. 實現Serializable而不提供writeObject/readObject方法
- 3. Java中的Serializable - writeObject()/ ReadObject和Externalizable - readExternal()/ writeExternal()有什麼區別?
- 4. 比較器爲什麼要實現Serializable?
- 5. ActionSupport爲什麼要實現Serializable
- 6. 爲什麼實現Serializable接口的類實現none接口的方法?
- 7. 爲什麼傳輸對象需要實現Serializable?
- 8. writeObject和readObject如何工作?
- 9. 爲什麼Java.lang.Object沒有實現Serializable接口?
- 10. 的getString實現Serializable接口
- 11. DTO實現Serializable接口
- 12. 爲什麼我們要實現接口?
- 13. 爲什麼我們不需要實現Serializable來序列化爲xml
- 14. 實現接口的抽象類不需要方法實現。爲什麼?
- 15. 什麼時候需要一個序列化對象中的自定義readObject/writeObject?
- 16. 爲什麼布爾包裝類實現Serializable接口和Comparable接口?它有什麼用處?
- 17. 爲什麼需要實現可串行化接口?
- 18. Java爲什麼需要實現一個接口?
- 19. 什麼是一個不需要實現的接口?
- 20. 什麼是[Serializable接口]和[序列化()]
- 21. 爲什麼的AtomicInteger實現Serializable
- 22. 何時以及爲什麼JPA實體應該實現Serializable接口?
- 23. 何時重寫writeObject/readObject?
- 24. 序列化 - readObject writeObject覆蓋
- 25. 爲什麼實現接口的泛型類不需要構造函數?
- 26. 爲什麼我們有Externalizable當我們可以覆蓋java中的writeObject和readObject
- 27. 爲什麼我需要Iterator接口,爲什麼要使用它?
- 28. 只是描述接口描述實現需要做什麼?
- 29. 爲什麼Golang需要接口?
- 30. 爲什麼我們需要IAudioRenderClient接口
這就是它設計的方式。序列化只是一個標記界面。 –
它保持這種方式向後兼容。 –
如果您將其標記爲「Serializable」,則可能會對某些數據造成潛在的安全風險,基本上允許網絡發送和接收此類數據。 –