Вопрос в том, сделать ли вложенный класс в Java статическим вложенным классом или внутренним вложенным классом. Я искал здесь и на Stack Overflow, но не смог найти никаких вопросов, касающихся последствий этого решения для дизайна.
Я нашел вопросы о разнице между статическими и внутренними вложенными классами, что мне ясно. Однако я еще не нашел убедительной причины использовать статический вложенный класс в Java - за исключением анонимных классов, которые я не рассматриваю для этого вопроса.
Вот мое понимание эффекта от использования статических вложенных классов:
- Меньше связывания: мы обычно получаем меньше связывания, так как класс не может напрямую получить доступ к атрибутам своего внешнего класса. Меньшее связывание обычно означает лучшее качество кода, более легкое тестирование, рефакторинг и т. Д.
- Одиночный
Class
: загрузчик классов не должен заботиться о новом классе каждый раз, когда мы создаем объект внешнего класса. Мы просто получаем новые объекты для одного и того же класса снова и снова.
Для внутреннего класса я обычно нахожу, что люди рассматривают доступ к атрибутам внешнего класса как профессионал. Я позволю себе расходиться в этом отношении с точки зрения дизайна, так как этот прямой доступ означает, что у нас есть высокая связь, и если мы когда-нибудь захотим извлечь вложенный класс в его отдельный класс верхнего уровня, мы можем сделать это только после существенного поворота это в статический вложенный класс.
Таким образом, мой вопрос сводится к следующему: я ошибаюсь, полагая, что доступ к атрибутам, доступный для нестатических внутренних классов, приводит к высокой связи, следовательно, к снижению качества кода, и что из этого я могу сделать вывод, что (неанонимные) вложенные классы должны вообще быть статичным?
Или другими словами: существует ли убедительная причина, по которой человек предпочитает вложенный внутренний класс?