zoukankan      html  css  js  c++  java
  • Java集合类中不实现Cloneable和Serializable原因

     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

        

  • 相关阅读:
    2020年面向对象程序设计寒假作业1_实践题
    2020年面向对象程序设计寒假作业1_问答题
    实验5:开源控制器实践——POX
    实验4:开源控制器实践——OpenDaylight
    实验3:OpenFlow协议分析实践
    实验2:Open vSwitch虚拟交换机实践
    第一次个人编程作业
    实验1:SDN拓扑实践
    第一次博客作业
    面向对象程序设计寒假作业3
  • 原文地址:https://www.cnblogs.com/feizhai/p/9611023.html
Copyright © 2011-2022 走看看