从多个对象引用相同的ArrayList

时间:2013-01-03 14:55:56

标签: java

我想知道如何从多个对象引用相同的ArrayList。 以下不是一个真实世界的例子,它仅用于解释目的。

如果我的CarCatalog课程有ArrayList字段:

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

如果我然后创建CarCreatorCarDeleter的实例,并将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字段中吗?

1 个答案:

答案 0 :(得分:3)

是的。当你写:

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

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

immutable 对象有一个强有力的论据。也就是说,无法更改的对象。显然这一直不实用,所以你需要明确谁拥有列表,谁允许更改它,并尽可能地传递副本或不可变版本。这通常被称为防御性编程