gpt4 book ai didi

java - 在单例对象中克隆某些内容

转载 作者:行者123 更新时间:2023-11-30 06:01:53 26 4
gpt4 key购买 nike

也许我只是停电了,但我找不到可行的方法来解决我的问题。

我有一个单例对象 Class A包含ArrayList<Item> 。在 Class C我需要一个特定的ItemArrayList<Item> (克隆它)。而ArrayList<Item>应该不变,我需要对Item进行一些修改在Class C 。我尝试在 Class Item 中实现 Cloneable像这样:

public class Item implements Cloneable {

private ArrayList<String> mSize = new ArrayList<>();

protected Object clone() throws CloneNotSupportedException {
return super.clone();
}

public void modifySomething() {
mSize.clear();
}

}

后来我想得到Item像这样:

class C {

void foo() {

Item item = null;

try {
item = (Item) A.getInstance().getItems().get(0).clone();
item.modifySomething();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}

}
}

问题是 Item item也在单例对象中进行修改。

问:我是否采取了错误的方法?我怎样才能获得所需的行为?

最佳答案

这里:

protected Object clone() throws CloneNotSupportedException {
return super.clone();
}

这基本上是“无操作”。它不会神奇地将列表内容复制到新列表中。顺便声明一下:对于任何方法,重写都是没有意义的,而只能调用 super 方法的实现。那么你也可以:只是不重写该方法。

因此,要么使用不同的机制,要么真正覆盖该方法,使用自定义内容来创建新列表。否则,您的克隆和原始 Item 对象在相同列表实例上运行。

关于java - 在单例对象中克隆某些内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56457911/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com