Насколько я понимаю, геттеры/сеттеры всегда должны делать копии, чтобы защитить данные.Оборонительная копия: следует ли указывать в Javadoc?
Однако для многих из моих классов, это безопасно иметь геттер возвращает ссылку на имущество просил, так что следующий код
b = a.getB();
b.setC(someValue);
фактически изменяет состояние объекта в. Если я смогу доказать, что это нормально для моего класса, хорошая практика для реализации getter таким образом? Должен ли пользователь быть уведомлен об этом, например, в Javadoc? Я думаю, что это нарушило бы парадигму реализации скрытие, поэтому, я должен всегда считать, что состояние не изменилось, и сделать вызов сеттера
b = a.getB();
b.setC(someValue);
a.setB(b);
Спасибо заранее S
+1 для обозначения ограниченного интерфейса. Для читателей .NET ознакомьтесь с List (T) .AsReadOnly и ReadOnlyCollection (T). – TrueWill
Я не знал вариант 3, и мне действительно (действительно) понравилось. Большое спасибо! – Sebastien
Я часто создаю версию коллекции только для чтения и удерживаю ее как переменную-член, поэтому я могу передать ее в своих геттерах (кажется «лучше», чем повторное создание списка только для чтения). –