Сделать переменные-члены private final и скопировать параметры:
final class ImmutableWithObject {
private final Object obj;
private final List myList;
public ImmutableWithObject(Object obj1 , List list)
{
this.obj = obj1.clone();
this.list = (List) list.clone();
}
}
Это не позволит никакому другому классу изменять ваше внутреннее состояние и не позволит ImmutableWithobject изменить myList
или obj
Рекомендации. Однако состояние объекта и список могут по-прежнему управляться внутренне.Как отмечали другие, кто бы ни прошел мимо списка или obj1 вашего класса, он сможет манипулировать им и извне.Поскольку в C ++ нет эквивалента чего-то вроде const
, нам придется копировать объекты, чтобы убедиться, что они не изменены извне.
Точно так же, если был геттер, он также должен возвращать только копию (или некоторый интерфейс только для чтения или оболочку только для чтения):
public Object getObj() { return obj.clone(); }