Давно уже пишу на java и я привык свойства класса делать приватном и писать для них гетер и сетер методы но я понял что не знаю зачем это нужно? Ведь если у тебя есть метод сетер и гетер к свойству не легче сделать его публичном и использовать?
2 Answers
Методы get() и set() нужны не только для того, чтобы получить доступ к данным, но и чтобы не допустить некорректной работы с ними.
Например:
private int n = 1;
int[] array = new int[5];
public void setN(int n) {
if (n >= 0 && n < 5)
this.n = n;
else
this.n = 2;
{
public void method() {
array[this.n] = 5;
}
В данном случае, если мы захотим изменить n вызвав метод setN(), то при вызове метода method(), не будет ошибки из-за выхода за пределы массива.
- 1,072
Если у вас действительно никакой логики в геттерах сеттерах нет (и не предвидится), а только "пустышки", то вы только захламляете код лишними методами. Вспомните YAGNI - то что вы планируете может вам никогда не понадобится, но вы уже платите цену за возросшую сложность кода.
То что что-то можно использовать, не значит что это будет использовано. А то можно сразу и историю к каждому полю прицепить, и стэк, и логгирование .. но обычно не нужно.
Если же в геттерах-сеттерах чаще есть логика (примеры такой логики приведены в других ответах), чем ее нет, то да, код будет конситентнее (проще), если писать их везде по единому шаблону.
Аналогичный вопрос про C++ - В чем смысл геттеров и сеттеров в C++ (и не только)?
- 13,809