克隆是一种基本的编程模式。事实上,Java在很多方面可能实现得很差,但这丝毫没有减少克隆的必要性。而且,很容易实现克隆,无论你希望它如何工作,浅层的,深层的,混合的,无论什么。如果愿意的话,甚至可以为函数使用clone名称,而不实现Cloneable。

假设我有类A、B和C,其中B和C是从A派生的。如果我有一个A类型的对象列表,如下所示:

ArrayList list1;

ArrayList list2 = new ArrayList();

for(A a : list1) {

list2.add(new A(a));

}

如果对象实际上是B或C类型的,则不会得到正确的副本。如果A是抽象的呢?现在,有人提出:

ArrayList list2 = new ArrayList();

for(A a : list1) {

if(a instanceof A) {

list2.add(new A(a));

} else if(a instanceof B) {

list2.add(new B(a));

} else if(a instanceof C) {

list2.add(new C(a));

}

}

你想做的是:

ArrayList list2 = new ArrayList();

for(A a : list1) {

list2.add(a.clone());

}

很多人都指出了克隆的基本Java实现存在问题的原因。但是,这样很容易克服:

public A clone() {

return new A(this);

}

B类:

@Override

public B clone() {

return new B(this);

}

C类:

@Override

public C clone() {

return new C(this):

}

java的cloneable_关于Java cloneable相关推荐

  1. Java的基础方法Java的对象_java基础之 创建对象的几种方式

    有4种显式地创建对象的方式: 1.用new语句创建对象,这是最常用的创建对象的方式. 2.运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor ...

  2. Java学习之二-Java反射机制

    问题: 在运行时,对一个JAVA类,能否知道属性和方法:能否调用它的任意方法? 答案是可以的,JAVA提供一种反射机制可以实现. 目录 什么是JAVA的反射机制 JDK中提供的Reflection A ...

  3. 《深入理解java虚拟机》笔记1——Java内存区域与Java对象

    运行时数据区域 JVM载执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则是依赖用户线程 ...

  4. 深入理解JVM(1)——Java内存区域与Java对象

    最近放暑假在家,没有实验室的工作要做,正好趁这个时间恶补了之前一知半解的JVM知识,使用的主要学习资料是周志明大大的<深入理解Java虚拟机--JVM高级特性与最佳实践>,我仔细拜读了两遍 ...

  5. 关于Java的Object.clone()方法与对象的深浅拷贝,java面试题,java初级笔试题

    写在最前面,我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家.扫码加微信好友进[程序员面试学习交流群],免费领取.也欢迎各位一起在群里探讨技术. 文章 ...

  6. java中hashset_Java HashSet – Java中的HashSet

    java中hashset Java HashSet is the most popular implementation of Set interface. java.util.HashSet is ...

  7. 【java毕业设计】基于java+swing+Eclipse的俄罗斯方块游戏GUI设计与实现(毕业论文+程序源码)——俄罗斯方块游戏

    基于java+swing+Eclipse的俄罗斯方块游戏GUI设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+swing+Eclipse的俄罗斯方块游戏GUI设计与实现,文章末尾 ...

  8. Java常见面试题 Java面试必看 (一)

    本篇博客是本人收集网上Java相关的资料整理所得,仅供参考. 一.Java基础 1.JDK 和 JRE区别 JDK(Java Development Kit)是针对Java开发员的产品,是整个Java ...

  9. 1.Java内存区域与Java对象

    运行时数据区域 JVM载执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则是依赖用户线程 ...

最新文章

  1. r 字符串转化为数值_Lua 字符串处理
  2. 生产者消费者问题Java三种实现
  3. 服务器数据库怎么添加计划维护,服务器数据库怎么添加计划维护
  4. 微软在Build 2016开发者大会中发布 “认知服务”,牛津计划有正式名字啦!
  5. epoll nio区别_【总结】两种 NIO 实现:Selector 与 Epoll
  6. day 68 增删改查 语法
  7. 2025.wireshark工具使用
  8. D - 又见回文---C11新标准
  9. mysql 头行关联_mysql实现一样变多行(表关联,批量实现)
  10. 监控与分析工具nmon的安装与使用
  11. Codeforces 888E - Maximum Subsequence
  12. 谷歌浏览器(Chrome浏览器)最新官方下载(含注意事项)
  13. Sql取出各科分数前三名的学生,Sql各科成绩前三的学生
  14. Unity3d 联通沃商店接入问题
  15. Slave_IO_Running: No 的解决
  16. phpstudyv8集成环境下,用Dwcs6链接数据库失败并显示:your php server doesnot have the Mysql module……
  17. 如何在直播中解决黑屏、花屏、闪屏问题
  18. UG\NX二次开发 判断两个圆柱面共轴的思路
  19. 什么叫超融合基础架构?
  20. PHP错误和异常处理

热门文章

  1. 从mongodb移除分片
  2. 计算机职称考试试题 操作题,2017职称计算机考试PowerPoint操作题训练题
  3. 最佳线程数 6666 epoll触发量
  4. 动态令牌离线生成机制探究(2FA TOTP)
  5. 保/防护器件系列之压敏电阻
  6. 【Unity3D】发射(Raycast)物理射线(Ray)
  7. uniapp 使用秋云uCharts图表组件、echarts图表组件
  8. 北大研究生 pk 香港本科生
  9. 硬件街机游戏开发,单片机游戏开发,CPLD/FPGA、ARM平台游戏开发群成立
  10. 算法 64式 19、数学算法整理