繁体   English   中英

如何在Java中将数组列表从一个类复制到另一个类?

[英]How do I copy an arraylist from one class to another in Java?

我知道要复制一个数组列表并有两个彼此独立的列表,您必须使用深层复制(将对象从一个列表复制到另一个列表,而不仅仅是引用),但是有一种方法可以跨类完成?

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

有任何线索吗?

这高度表明了设计缺陷。

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

唯一不能完全解决问题的情况是,如果您的两个类必须分别修改列表。

如果这是必需的,那么我可能会将包装类的不同实例传递给每个修改类(具有对同一源列表的引用),然后有一种方法为新添加的数据添加一个引用原始类-通过这种方式查询时,包装器将仅返回未加标签的项目(属于原始共享列表的项目)和使用其自己的ID进行标签的项目。

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

我几乎从未想要过深复制。 它发生了,但是非常罕见。

如果您发布更多信息,也许我们可以在重新设计方面更加具体。

还:(编辑)很有可能复制的数组列表不是您的问题-可能不是真正的深层副本。 对于深层复制,这意味着您为数组列表中的每个对象实现了一个复制方法(我相信它们应该被称为.clone(),我从不使用这种东西-正如我所说的,这是很不好的做法),然后您可以在每种方法上调用复制方法,以在下一个列表中获取新副本。

此外,您复制的对象引用的任何对象也可能也应该被克隆。 “深”指的是一路下降。

我猜你在这个过程中某处失败了。

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

我的建议是创建一个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;
   }

在第2类上,只需调用此方法。 然后,只需从另一个答案中查看有关null异常的测试,就可以正常工作。 希望能帮助到你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM