1. 程式人生 > >Java集合類中不實現Cloneable和Serializable原因

Java集合類中不實現Cloneable和Serializable原因

tran style 能夠 uid sta 工具 數據 類型 size

 Java集合類中不實現Cloneable和Serializable原因

  

  莫名的被問這麽一個問題,也答不上,記錄記錄,為何Java集合類不實現Cloneable和Serializable接口。

  

  1.Cloneable接口作用是將一個對象的屬性值復制給另一個對象,而不是對象的一個引用。

  

  2.Serializable接口作用(這個羅嗦一下)

    2.1序列化的用途

      1.有時候,如果想讓一個對象持久的存儲下來(存到磁盤),或者是進行遠程的對象調用,那就要使用序列化實現這些作用。

      我們必須對所有支持持久化存儲的類實現Serializable接口,讀取的時候也要進行反序列化。

      2.對於jvm來說,進行持久化的類必須有個標記,就是實現Serializable接口,關聯serialVersionUID,這個變量就是在反序列話中

      確定用那個類加載這個對象。

      3.值得主意的是,持久化的數據都是存在在java堆中,static類型的數據存在在方法區中,不能被持久化。如果不想讓某個成員變量

      持久化,變量前面用transient關鍵字

      4.當然序列化的那個serialVersionUID這個還可以進行自定義

  3.回到本貼的主題,為什麽集合類中不實現上面兩個接口呢

    其實不難看出,Cloneable是復制對象的,序列化也是針對對象的操作,集合類只是管理對象的一個工具,就好比說list能夠線性的管理對象,

    set集合能夠對對象去重等,這些集合類都是針對與為管理對象而產生的。

    其實,著兩個接口都是針對真是的對象,而不是集合類這樣的管理對象的對象。這個從語義上就是集合類的Cloneable接口和Serializable接口

    應該又集合中具體的類型實現,而不是又集合類來實現序列化。

    假設集合類實現了這兩個接口,如果我要生成一個不需要序列化,不需要clone的集合,那麽集合類就強行實現,這樣有違集合的設計原則。

參考:https://blog.csdn.net/leixingbang1989/article/details/50556966

參考:https://blog.csdn.net/liu_shi_jun/article/details/76461517

    

Java集合類中不實現Cloneable和Serializable原因