列表问题的Java参考?

时间:2013-01-23 07:10:58

标签: java list

我有一个课程A,其中包含:

List aList = new ArrayList();

aList .add("1");
aList .add("2");
aList .add("3");

现在,类 A.java 包含另一个类 B.java 的引用,而类 B.java 包含另一个带get()的列表和set()方法。

List bList;

在课程 A.java 中,我正在创建类 B.java 的对象,并调用 bList 的setmethod并给出 A. java 列出此方法。

B b = new B();
b.setBList(aList);

但如果 aList 发生变化, bList 的值也会发生变化。如何创建列表甚至更改主* (aList) *列表引用列表不会更改?

1 个答案:

答案 0 :(得分:6)

你需要制作所谓的防御性副本:

b.setBList(new ArrayList(aList));

请注意,这仅复制列表本身,而不是内部对象。因此,如果有人在列表的第一个对象上调用了一个变异方法,那么这些更改仍将对B可见(显然在您的示例中不是问题,因为字符串是不可变的)。