2011-01-23 2 views
2

Можно создать дубликат:
Private vs. Public members in practice (how important is encapsulation?)Инкапсуляция хорошей практика

Недавно я встретив ситуации, когда я объявляю переменный класс, как общественные, так как он будет использоваться в другом классе , Кто-то недавно сказал мне, что я должен сделать такие переменные приватными и написать публичный метод, возвращающий значение переменной. Мне сказали, что это хорошая практика. Я просмотрел свою книгу Java и не нашел никакой ссылки на это. Мой вопрос заключается в том, является ли хорошей практикой объявлять как можно больше переменных класса как частных?

+1

Конечно, я всегда начинаю с объявления * всех из них * частных. Большую часть времени они так и остаются. Это означает, что вы пишете больше, но ваша IDE помогает вам. Threre также является «проектом lombok», который генерирует вам аксессоры, когда вы комментируете поле или класс. – maaartinus

ответ

3

Да. Как правило, все переменные должны быть частными (не защищенными, частными), и должны быть методы для получения их значений (и, возможно, их установки), если (и только если) вы хотите разрешить это посторонним. Переменные, которые вы используете, являются деталями реализации и обычно содержат данные, которые должны быть определенным образом. Getters и seters позволяют вам брать на себя ответственность за эти данные, проверять их, синхронизировать и т. Д., Вместо того, чтобы позволить некоторому помещению хранить в нем случайные вещи и потенциально сделать ваш объект непригодным.

Единственным исключением может быть классы, единственной целью является хранение данных, так что вы можете отправить его вокруг как один объект, вроде как C/C++ struct. Но тогда вы принимаете решение, что нет, вы не хотите проверять, синхронизировать, инкапсулировать эти данные каким-либо образом ... и изменение вашего ума позже нарушает двоичную совместимость (что означает, что любой код, затрагивающий этот класс, должен будет перекомпилировать). Не большая сделка в небольшом частном проекте; огромная сделка в общедоступной структуре/API.

Смежные вопросы