-4

我想知道如何从多个对象中引用同一个 ArrayList。以下不是真实世界的示例,仅出于解释目的而编造。

如果我有一个CarCatalog带有ArrayList字段的类:

ArrayList<Car> cars = new ArrayList<>();

如果我然后创建一个 and 的实例,CarCreator并用它CarDeleter传递cars字段

CarCreator creator = new CarCreator(this.cars);

并将参数分配给CarCreator对象中的字段:

class CarCreator {
    ArrayList<Car> cars;

    public CarCreator(ArrayList cars) {
        this.cars = cars;
    }
}

现在,如果我添加一个Car对象CarCreator

this.cars

它也会出现在CarCatalogs现场吗?

4

1 回答 1

3

这是。当你写:

ArrayList<Car> cars = new ArrayList<>();

汽车不是一个ArrayList。它是ArrayList. 这很关键,因为当您传递cars时,您传递的是对原始列表的引用。因此,修改一个对象中的列表将意味着这些更改在第二个对象中可见。

对于不可变对象,这里有一个强有力的论据。也就是不能改变的对象。显然,这并不总是可行的,因此您需要清楚谁拥有该列表,谁可以更改它,并尽可能传递副本或不可变版本。这通常被称为防御性编程

于 2013-01-03T15:17:07.520 回答