Этот код работает:
public void updateCollection(Collection<Object> col) {
this.objectCollection.clear();
this.objectCollection.addAll(col);
}
Но это создает проблемы:
public void updateCollection(Collection<Object> col) {
this.objectCollection=new ArrayList(col);
}
Я подозреваю, что этот вариант вашего первого метода привел бы к таким же проблемам:
public void updateCollection(Collection<Object> col) {
this.objectCollection = new ArrayList();
this.objectCollection.clear();
this.objectCollection.addAll(col);
}
Почему?Очевидно, у вас есть другая ссылка на objectCollection, которая где-то используется.Где-то в вашем коде другой объект говорит (например):
myCopyOfObjectCollection = theOtherObject.objectCollection;
Если вы используете метод получения, это не меняет базового поведения - выпо-прежнему сохраняются другие ссылки.
Так что, если при первоначальном назначении, скажем, коллекция содержала {1, 2, 3}, вы начинаете с:
- this.objectCollection:{1, 2, 3}
- that.copyOfObjectCollection: {1, 2, 3}
Когда вы назначаете new ArrayList для this.objectCollection,и заполнив его, скажем, {4, 5, 6}, вы получите следующее:
- this.objectCollection: {4, 5, 6}
- that.copyOfObjectCollection: {1, 2, 3}
«Это» по-прежнему указывает на исходный ArrayList.