Рассмотрим следующий класс:
public class Cars extends Observable{
private ArrayList<String> carList = new ArrayList<String>();
public void addToCarList(String car){
// ...
hasChanged();
notifyObservers();
}
public void removeFromCarList(String car){
// ...
hasChanged();
notifyObservers();
}
public ArrayList<String> getCarList() {
return carList;
}
}
Как вы можете видеть, каждый раз, когда изменен carList, я хочу уведомить Observers
.
Если кто-то делает getCarList().add(...);
, это обойдется.
Как я могу предоставить доступ для чтения к carList
(для итерации по нему и т.д.), но запретить доступ к записи, кроме специальных методов addToCarList
и removeFromCarList
?
Я подумал об этом:
public ArrayList<String> getCarList() {
return (ArrayList<String>)carList.clone();
}
но кто-то, использующий мой класс, при добавлении чего-то к клону carList
не должен быть проинформирован о том, что это не так, как это должно было быть сделано.