我有一个课程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) *列表引用列表不会更改?
答案 0 :(得分:6)
你需要制作所谓的防御性副本:
b.setBList(new ArrayList(aList));
请注意,这仅复制列表本身,而不是内部对象。因此,如果有人在列表的第一个对象上调用了一个变异方法,那么这些更改仍将对B可见(显然在您的示例中不是问题,因为字符串是不可变的)。