После поиска я нашел эти вопросы, но нет ответов на мой конкретный вопрос:Симуляция изменения свойств с неизменяемыми объектами
Undo/Redo with immutable objects
Why continue to use getters with immutable objects
How to write a test friendly immutable value class
Is it okay to expose the state of an immutable object
Вот setup: У меня есть im изменяемый класс следующим образом:
public class MyImmutableOb {
private final String name;
private final Collection<Integer> myNumbers;
public MyImmutableOb(String name) {
this.name = name;
myNumbers = new LinkedList<>();
}
public MyImmutableOb(String name, MyImmutableOb oldOb) {
this.name = name;
myNumbers = new LinkedList<>();
for (int i : oldOb.getNumbers()) myNumbers.add(i);
}
public Collection<Integer> getNumbers() {
return new LinkedList<>(myNumbers);
}
}
Я включил конструктор, как это, означало, чтобы имитировать изменение названия на объекте. Вопрос, действительно воспроизводит Collection
в этой моды перерыв неизменности ?:
public MyImmutableOb(String name, MyImmutableOb oldOb) {
this.name = name;
myNumbers = new LinkedList<>();
for (int i : oldOb.getNumbers()) myNumbers.add(i);
}
Я имею трудное время оборачивать вокруг моей головы этого.
Член 'myNumbers' вашего« неизменяемого »класса является списком _mutable_. Ваш класс либо является, либо не является эффективным, неизменным. Ответ зависит от того, будет ли что-либо в '// и т. Д. ...' часть класса модифицировать список. –
Ваш второй конструктор вызывает 'oldOb.getNumbers()', но вы не указали нам определение getNumbers(). Что оно делает? Если он просто возвращает 'oldOb.myNumbers', тогда ваш класс изменен: клиент может вызвать getNumbers(), а затем изменить список. –
Это определение может помочь, да? Ха-ха, я плохо, я пошел вперед и добавил определение в. Это все методы в классе в настоящее время. – nihilon