Почему защищенные переменные не разрешены по умолчанию в Checkstyle? - PullRequest
32 голосов
/ 11 декабря 2011

Я получаю много предупреждений в Eclipse, таких как:

Переменная 'myVariable' должна быть закрытой и иметь методы доступа.

Я думаю, что получаю их, потому чтоЯ не установил protectedAllowed вручную в true в затмении.Но почему по умолчанию установлено значение false?Разве я не должен использовать защищенные атрибуты?

Ответы [ 3 ]

26 голосов
/ 11 декабря 2011

Теоретически защищенные атрибуты (переменные) являются антишаблоном в объектно-ориентированных языках. Если только подклассы должны обращаться к атрибутам-членам своего суперкласса, определите сами атрибуты как частные и создайте защищенные методы доступа (getter и setter). Этот подход применяет концепцию «сокрытия информации». Существует альтернативное решение: определить атрибуты защищенного неизменяемого (конечного) члена.

Дополнительные показания:

18 голосов
/ 17 августа 2012

Полагаю, что делать все приватно - это анти-паттерн.Часто классы используются в связке и в целом представляют инкапсулированную сущность, помещенную в отдельный пакет.Им не нужно что-то скрывать друг от друга, но это правило заставляет скрываться без уважительной причины, увеличивая беспорядок и эффективно ухудшая стиль (насколько я понимаю).Между тем, мы часто видим, что каждый класс в пакете является публичным.Я предполагаю, что это намного хуже, но checkstyle не проверяет это.

Инкапсуляция существует не только на уровне класса, но и в пакете, системе и так далее.И я думаю, что эти уровни еще важнее.

5 голосов
/ 08 мая 2014

Разрешение доступа к пакету упрощает программирование в пакете и уменьшает стандартный код. Часто доступ необходим только из пакета. Частный доступ заставляет вас создавать множество практически бесполезных методов доступа. На самом деле это приводит к уменьшению инкапсуляции и сокрытия информации, потому что класс должен предоставлять доступ ко всем внутренним приложениям данных / структуры, а не просто к пакету через общедоступные методы доступа. Видимость пакета по умолчанию также облегчает тестирование, поскольку тестовые классы также находятся в одном и том же пакете (в директории test / tree).

...