java的cloneable_关于Java cloneable
克隆是一种基本的编程模式。事实上,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相关推荐
- Java的基础方法Java的对象_java基础之 创建对象的几种方式
有4种显式地创建对象的方式: 1.用new语句创建对象,这是最常用的创建对象的方式. 2.运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor ...
- Java学习之二-Java反射机制
问题: 在运行时,对一个JAVA类,能否知道属性和方法:能否调用它的任意方法? 答案是可以的,JAVA提供一种反射机制可以实现. 目录 什么是JAVA的反射机制 JDK中提供的Reflection A ...
- 《深入理解java虚拟机》笔记1——Java内存区域与Java对象
运行时数据区域 JVM载执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则是依赖用户线程 ...
- 深入理解JVM(1)——Java内存区域与Java对象
最近放暑假在家,没有实验室的工作要做,正好趁这个时间恶补了之前一知半解的JVM知识,使用的主要学习资料是周志明大大的<深入理解Java虚拟机--JVM高级特性与最佳实践>,我仔细拜读了两遍 ...
- 关于Java的Object.clone()方法与对象的深浅拷贝,java面试题,java初级笔试题
写在最前面,我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家.扫码加微信好友进[程序员面试学习交流群],免费领取.也欢迎各位一起在群里探讨技术. 文章 ...
- java中hashset_Java HashSet – Java中的HashSet
java中hashset Java HashSet is the most popular implementation of Set interface. java.util.HashSet is ...
- 【java毕业设计】基于java+swing+Eclipse的俄罗斯方块游戏GUI设计与实现(毕业论文+程序源码)——俄罗斯方块游戏
基于java+swing+Eclipse的俄罗斯方块游戏GUI设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+swing+Eclipse的俄罗斯方块游戏GUI设计与实现,文章末尾 ...
- Java常见面试题 Java面试必看 (一)
本篇博客是本人收集网上Java相关的资料整理所得,仅供参考. 一.Java基础 1.JDK 和 JRE区别 JDK(Java Development Kit)是针对Java开发员的产品,是整个Java ...
- 1.Java内存区域与Java对象
运行时数据区域 JVM载执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则是依赖用户线程 ...
最新文章
- r 字符串转化为数值_Lua 字符串处理
- 生产者消费者问题Java三种实现
- 服务器数据库怎么添加计划维护,服务器数据库怎么添加计划维护
- 微软在Build 2016开发者大会中发布 “认知服务”,牛津计划有正式名字啦!
- epoll nio区别_【总结】两种 NIO 实现:Selector 与 Epoll
- day 68 增删改查 语法
- 2025.wireshark工具使用
- D - 又见回文---C11新标准
- mysql 头行关联_mysql实现一样变多行(表关联,批量实现)
- 监控与分析工具nmon的安装与使用
- Codeforces 888E - Maximum Subsequence
- 谷歌浏览器(Chrome浏览器)最新官方下载(含注意事项)
- Sql取出各科分数前三名的学生,Sql各科成绩前三的学生
- Unity3d 联通沃商店接入问题
- Slave_IO_Running: No 的解决
- phpstudyv8集成环境下,用Dwcs6链接数据库失败并显示:your php server doesnot have the Mysql module……
- 如何在直播中解决黑屏、花屏、闪屏问题
- UG\NX二次开发 判断两个圆柱面共轴的思路
- 什么叫超融合基础架构?
- PHP错误和异常处理