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

        

  • 相关阅读:
    [课程设计]Scrum 1.5 多鱼点餐系统开发进度(点餐页面框架修复及继续布置)
    [课程设计]Scrum 1.4 多鱼点餐系统开发进度(点餐页面框架布置)
    [课程设计]Scrum 1.3 多鱼点餐系统开发进度(系统主界面框架&美化)
    任务完成情况
    SCRUM项目4.0
    操作系统 实验三 进程调度模拟程序
    Scrum 项目3.0
    操作系统 实验二、作业调度模拟程序 【完整版】
    Scrum 项目2.0
    0428 《构建之法》第6~7章读后感
  • 原文地址:https://www.cnblogs.com/feizhai/p/9611023.html
Copyright © 2011-2022 走看看