Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
列表问题的Java引用?_Java_List - Fatal编程技术网

列表问题的Java引用?

列表问题的Java引用?,java,list,Java,List,我有一个类a,它包含: List aList = new ArrayList(); aList .add("1"); aList .add("2"); aList .add("3"); 现在classA.java包含另一个classB.java的引用,classB.java包含另一个带有get()和set()方法的列表 在类A.java中,我正在创建类B.java的对象,并调用bList的setmethod,并为该方法提供A.java列表 B b = new B(); b.setBList(

我有一个类
a
,它包含:

List aList = new ArrayList();

aList .add("1");
aList .add("2");
aList .add("3");
现在classA.java包含另一个classB.java的引用,classB.java包含另一个带有get()和set()方法的列表

在类A.java中,我正在创建类B.java的对象,并调用bList的setmethod,并为该方法提供A.java列表

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

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

您需要创建所谓的防御副本:

b.setBList(new ArrayList(aList));

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

您需要创建所谓的防御副本:

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