如何在Java中将arraylist从一个类复制到另一个类?

问题描述 投票:0回答:2

我理解为了复制一个arraylist并且有两个彼此独立的列表,你必须使用一个深层副本(将对象从一个列表复制到另一个列表而不仅仅是引用),但是有没有办法可以跨类进行?

例如;我从Class1调用Class2。在Class2中,对象在事件发生时添加到自定义对象的ArrayList中。我希望能够将此ArrayList传输到Class1,但每当我尝试时,我都会得到一个NullPointer。

任何线索?

java arraylist deep-copy
2个回答
1
投票

这高度表明了设计缺陷。

通过将列表包装在类中,共享类并使用它来控制对列表的访问,查看是否无法实现相同的目标。

唯一不仅仅是直接工作的情况是你的两个类必须独立修改列表。

如果这是一个要求,那么我可能会将包装类的不同实例交给每个修改类(引用相同的源列表),然后有一种方法可以使用引用ID的新ID来标记新添加的数据。原始类 - 当您查询时,包装器将只返回未标记的项(属于原始共享列表的项)和标记有自己的ID的项。

该包装类或包装类可以包含第二个列表,并在查询时返回原始列表和第二个列表的组合结果。

我几乎从不想要深刻的副本。它发生了,但它很少见。

如果您发布更多信息,也许我们可以更具体地帮助重新设计。

另外:(编辑)可能是复制的数组列表不是你的问题 - 它可能不是真正的深拷贝。对于深层复制,它意味着你实现了一个复制方法(我相信它们应该被称为.clone(),我从来没有使用过这个东西 - 就像我说的那样,这对于数组列表中的每个对象来说都是坏的)您可以在每个上面调用复制方法,以便在下一个列表中获取新副本。

此外,您复制的对象引用的任何对象也应该被克隆。 “深层”意味着一直到树下。

我猜你在这个过程的某个地方失败了。

我真的很想知道为什么你觉得你需要副本而不是参考。


0
投票

我的建议是你创建一个getArray()方法并从另一个类中调用它。这个方法应该创建一个ArrayList的副本,因为你不应该在类中“转移”变量;始终使用get()方法,因此OO范例保持不变。

做这样的事情:

1级

public ArrayList<Object> getArray() {
   ArrayList<Object> aux = new ArrayList<Object>();
    for(Object x : list) //object is the string, int, etc...
        aux.add(x.clone()) //assuming the Object has a clone method!
    return aux;
   }

在Class 2上,只需调用此方法即可。然后从另一个关于null异常的答案看一下测试应该有效。希望能帮助到你。

© www.soinside.com 2019 - 2024. All rights reserved.