相关疑难解决方法(0)

如何克隆ArrayList并克隆其内容?

如何克隆ArrayList并在Java中克隆其项目?

例如,我有:

ArrayList<Dog> dogs = getDogs();
ArrayList<Dog> clonedList = ....something to do with dogs....
Run Code Online (Sandbox Code Playgroud)

我希望那些物品clonedList与狗列表中的物品不同.

java collections clone deep-copy

258
推荐指数
8
解决办法
41万
查看次数

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()vs Copy构造函数 - 在java中推荐

克隆方法与java中的复制构造函数.哪一个是正确的解决方案.在哪里使用每个案例?

java clone copy-constructor

137
推荐指数
4
解决办法
16万
查看次数

如何轻松克隆容器(fe ArrayList)*?使用.clone()是不对的?

克隆ArrayList(Vector替换)的我可能是天真的解决方案

ArrayList<Double> alBis = (ArrayList<Double>) alOriginal.clone();
Run Code Online (Sandbox Code Playgroud)

考虑到因为数组包含不可变的双打,我不需要克隆它们,而只需要克隆容器.

当clone()返回一个Object时,我把它放在那里,然后-Xlint抱怨它是一个未经检查的强制转换.

所以现在怎么办?用supressWarnings忽略它?创建一个新的ArrayList并使用compact来复制原始元素?任何类似于Arrays.copyOf()的库方法?

我阅读了未经检查的投射警告,但接受的方式是令人难以置信的复杂.

java casting clone arraylist

3
推荐指数
1
解决办法
4668
查看次数

如何避免继承java clasess的复制构造函数中的instanceof

我正在编写一个用于克隆对象的复制构造函数.当一个类引用一个对象时,该对象被其他几个类进一步说明.

class Person
{
    String name;
    Address address;
 }

class HomeAdress extends Address
{
}
class OfficeAdress extends Address
{
}
Run Code Online (Sandbox Code Playgroud)

现在在Person的复制构造函数中,要决定要传递哪个Address对象,我必须使用instanceof.

public Person(Person p)
{
    name = p.name;
    if(p.address instanceof HomeAddress)
    {
        address = new HomeAddress((HomeAddress) address);
    }else if(p.address instanceof OfficeAddress)
    {
        address = new OfficeAddress((OfficeAddress) address);
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,当将新类型的地址添加到模型时,这是基本问题.我将不得不在Person复制构造函数中添加相同的检查.有没有办法避免instanceof检查实例化正确的地址对象.我可以使用refelction来避免代码中的instanceof吗?

java inheritance copy-constructor cloning

0
推荐指数
1
解决办法
1278
查看次数