相关疑难解决方法(0)

Java:深度克隆/复制实例的推荐解决方案

我想知道是否有推荐的方法在java中进行深度克隆/复制实例.

我有三个解决方案,但我可以错过一些,我想得到你的意见

编辑:包括Bohzo的提议和改进问题:它更多的是深度克隆而不是浅层克隆.

自己做:

在属性之后通过hand属性编写克隆代码并检查是否也克隆了可变实例.
亲:
- 控制将要执行的操作
- 快速执行
缺点:
- 编写和维护繁琐
- 容易出错(复制/粘贴失败,缺少属性,重新分配的可变属性)

使用反射:

使用您自己的反射工具或外部帮助程序(如jakarta common-beans),可以轻松编写一个通用的复制方法,该方法可以在一行中完成工作.
亲:
- 易于编写
- 没有维护
缺点:
- 对发生的事情的控制较少
- 如果反射工具也没有克隆子对象,则容易出现可变对象的错误
- 执行速度较慢

使用克隆框架:

使用为您执行此操作的框架,例如:
commons-lang SerializationUtils
Java Deep Cloning Library
Dozer
Kryo

亲:
- 与反思一样
- 更多地控制将要克隆的内容.
缺点:
- 即使在层次结束时,每个可变实例都被完全克隆
- 执行起来可能非常慢

使用字节码检测在运行时编写克隆

javassit,BCELcglib可能用于生成专用克隆器,只需单手写入.为此目的,有人知道使用这些工具之一的lib吗?

我错过了什么?
你会推荐哪一个?

谢谢.

java clone

173
推荐指数
4
解决办法
13万
查看次数

在数组上调用clone()是否也克隆其内容?

如果我clone()在类型A的对象数组上调用方法,它将如何克隆其元素?该副本是否会引用相同的对象?或者它会(element of type A).clone()为每个人打电话吗?

java clone

91
推荐指数
4
解决办法
10万
查看次数

数组是java中的对象

在java中我们可以声明一个类似的数组

String[] array = new String[10]; 
int size = array.length; 
Run Code Online (Sandbox Code Playgroud)

这是否意味着数组本身就是一个对象?因为在C++中,数组只是一个指针而没有任何方法.

java

90
推荐指数
6
解决办法
5万
查看次数

在Java中,什么是浅拷贝?

java.util.Calendar.clone()返回"...具有相同属性的新日历"并返回"此日历的浅表副本".

为回答这并不似乎是一个浅拷贝这里的SO.这个问题被标记为与语言无关, Java似乎不遵循语言无关的定义.当我单步执行代码时,我注意到结构和元素被复制到这个新对象,而不仅仅是语言无关的结构.

在Java中,什么是浅拷贝?

它与Java深层副本(如果存在)有何不同?

java clone shallow-copy

51
推荐指数
3
解决办法
8万
查看次数

标签 统计

java ×4

clone ×3

shallow-copy ×1