gpt4 book ai didi

java - 从对象列表更新对象而不影响对象的原始引用

转载 作者:太空狗 更新时间:2023-10-29 13:09:00 25 4
gpt4 key购买 nike

场景是,我有一个对象列表,如 ArrayList<MyObject> .当我修改列表的成员(项目/Myobject)时,它会更改列表中选定对象的原始引用。如何处理这种情况,以便原始引用 对象 (MyObject) 保持不变。

最佳答案

您可以使用 clone() 方法,但它有一些重要的限制。所以我不建议这样做。
另一种方法是通过在新创建的实例中复制原始实例的状态来创建 MyObject 的新实例。

您可以在 MyObject 中添加一个工厂方法,该方法将 MyObject 对象作为参数:

public MyObject(String message){
this.message = message;
}

public static MyObject copy(MyObject original){
MyObject copy = new MyObject(original.getMessage());
return copy;
}

你可以做类似的事情来复制实例:

List<User> myObjects = new ArrayList<>();
myObjects.add(new MyObject("hello msg"));
MyObject copyObject = MyObject.copy(myObjects.get(0));

现在如果你想防止修改,包含在 MyObjectList 中的元素,我认为你不应该公开 List 到类客户端。如果客户忘记复制,则不尊重您的要求。
因此,您可以在包含 List 的类中提供自定义 get() 方法,以返回所请求的 MyObject 的副本。它将产生更可靠的防御副本。

关于java - 从对象列表更新对象而不影响对象的原始引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43480745/

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