Set/get методы для приватного поля

Рейтинг: 0Ответов: 2Опубликовано: 01.12.2014

Нужно ли следуя практике хорошего тона программирования создавать приватные методы доступа set/get для приватных полей класса, доступ к которым из вне запрещен?

private String msg;

private setMsg(String m) { this.msg = m; }
private String getMsg() { return this.msg; }

или даже лучше напрямую внутри класса изменять значение данного поля?

private void foo() {
    ...
    this.msg = "bar";
    ...

}

Ответы

▲ 3Принят

Приватные геттеры/сеттеры избыточны. Не нужно.

▲ 1

В целом, оба подходы имеют место быть, даже Мартин Фаулер в книге "Рефакторинг" говорит, что есть ярые фанаты обоих подходов, но единения нет. По поводу сеттеров/геттеров удобно в небольших классах, а вот вдруг вы рефакторите какой-нибудь класс, большой, с большим количеством полей и все дела, то вы чекнетесь от этих геттеров/сеттеров.

Обновление

Есть такая практика, называть приватные поля начиная с подчеркивания "private String _msg;", так что сразу понятно в коде, где приватное поле/метод, а где нет.

Если вам надо обратиться к приватному полю извне - то надо делать геттер, если вы будете общаться с полем внутри класса - геттеры/сеттеры не нужны. Вот так =) Но если получается так, что у вас надо ко ВСЕМ приватным полям обращаться извне, то у вас ошибка в архитектуре, и скорее всего класс занимается не тем чем надо и надо делать рефакторинг и делегировать обязанности в другие классы/методы.