Должен ли я всегда использовать модификатор частного доступа для полей класса? - PullRequest
6 голосов
/ 30 марта 2011

В настоящее время мы используем checkstyle на нашей базе кода, и он помечает любые нестатические поля класса, которые не используют приватный модификатор доступа.

Является ли это действительным правилом проверки стиля или существуют ситуации, когда желательно иметь не приватные поля? Например, я думал, что причина, по которой тестовые наборы JUnit создаются в одном и том же пакете, заключалась в том, что они могли обращаться к полям, используя default модификатор доступа?

Ответы [ 6 ]

7 голосов
/ 30 марта 2011

Одной из основных особенностей объектно-ориентированного программирования является скрытие / инкапсуляция информации.Это означает, что класс разрешает доступ к переменным-членам только через интерфейс: методы getter и setter.Таким образом, другие классы не могут получить доступ к переменным-членам и изменить их нежелательным образом.Таким образом, правило checkstyle действует

6 голосов
/ 30 марта 2011

Пункт 13 Effective Java 2nd: Минимизируйте доступность классов и членов.

Проверьте это.Это дает прекрасные идеи.

5 голосов
/ 30 марта 2011

ИМХО Лучше всего по возможности сделать поля private и final. Однако для модульных тестов может быть прагматичным выбором сделать их закрытыми для пакетов или получить к ним доступ через рефлексию. (Что составляет одно и то же)

Вы также можете использовать подход «черного ящика», который означает, что если вы не можете определить, что произошло с помощью общедоступного метода, его не следует проверять. (Или ваши тесты должны быть более надуманными)

2 голосов
/ 30 марта 2011

Частный доступ или окончательность не являются проблемой для продвинутых фреймворков, таких как JMockit.Тем не менее, геттер / сеттер может иметь некоторую производительность на более поздних версиях Android

1 голос
/ 30 марта 2011

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

0 голосов
/ 30 марта 2011

Я думаю, что это хорошее действительное правило, которое обеспечивает правильное скрытие информации, что является важным аспектом ООП.

Вместо этого используйте общедоступные методы получения и установки, чтобы объект мог контролировать изменения своего состояния.

...