Как вернуть значение из геттера правильно?

Как определить, когда следует возвращать ссылку, а когда глубокую копию объекта в геттере, чтобы избежать нежелательного изменения самого объекта в классе?
  • 14 марта 2024 г. 5:19
Ответы на вопрос 2
Возвращение значения из геттера должно зависеть от того, как вы хотите, чтобы ваш объект взаимодействовал с другими объектами в программе. Если вы вернете ссылку на объект из геттера, любые изменения, внесенные в этот объект через эту ссылку, будут отражены на самом объекте. Это может быть полезно, если вы хотите, чтобы изменения были видимы в разных частях вашей программы.

Однако, если вы хотите избежать нежелательного изменения самого объекта, возвращайте глубокую копию объекта из геттера. При этом будет создана новая копия объекта, не зависящая от оригинала, и любые изменения, внесенные в копию, не повлияют на оригинальный объект. 

Чтобы определить, когда следует возвращать ссылку, а когда глубокую копию объекта в геттере, учитывайте, в каких случаях вы хотите, чтобы изменения в объекте были видимы в других частях программы, и когда вы хотите избежать нежелательных изменений.
Полностью зависит от контекста. Здесь нет правильного ответа. 
Можно выделить 2 случая:
1. Код полностью твой
2. Код будут использовать другие пользователи

Если случай 1, то делай как хочешь. Здесь ты главный и знаешь что менять можно, а что нет
Если случай 2, то тут уже зависит:
- Если возвращаешь объект, который может (и должен) быть изменен - делай изменяемым
- Если это слепок состояния - то можно подумать над неизменяемым состоянием
- Можно прописать это (то что нельзя изменять объект) в документации к методу геттера

Дополнительно, если тебе так уж нужна неизменяемость, то добавляй интерфейсы. Возвращай какой-нибудь интерфейс с одними геттерами.
Похожие вопросы