0

我有一个类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的值也会改变。我如何创建一个列表,即使更改 main* (aList) * 列表引用列表也不会改变?

4

1 回答 1

6

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

b.setBList(new ArrayList(aList));

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

于 2013-01-23T07:13:22.040 回答