Esta pergunta é sobre se uma classe aninhada em Java deve ser uma classe aninhada estática ou uma classe aninhada interna. Pesquisei por aqui e no Stack Overflow, mas não consegui encontrar realmente nenhuma dúvida sobre as implicações de design dessa decisão.
As perguntas que encontrei estão perguntando sobre a diferença entre classes aninhadas estáticas e internas, o que é claro para mim. No entanto, ainda não encontrei um motivo convincente para usar uma classe aninhada estática em Java - com exceção das classes anônimas, que não considero para esta pergunta.
Aqui está minha compreensão do efeito do uso de classes aninhadas estáticas:
- Menos acoplamento: geralmente obtemos menos acoplamento, pois a classe não pode acessar diretamente os atributos de sua classe externa. Menos acoplamento geralmente significa melhor qualidade do código, testes mais fáceis, refatoração etc.
- Único
Class
: o carregador de classes não precisa cuidar de uma nova classe a cada vez, criamos um objeto da classe externa. Acabamos de receber novos objetos para a mesma classe repetidamente.
Para uma classe interna, geralmente considero que as pessoas consideram o acesso aos atributos da classe externa um profissional. Eu imploro para diferir nesse aspecto do ponto de vista do design, pois esse acesso direto significa que temos um alto acoplamento e, se quisermos extrair a classe aninhada em sua classe de nível superior separada, só podemos fazê-lo depois de transformar essencialmente em uma classe aninhada estática.
Portanto, minha pergunta se resume a isso: Estou errado ao supor que o acesso ao atributo disponível para classes internas não estáticas leva a um acoplamento alto, portanto a uma qualidade de código mais baixa, e deduzo disso que as classes aninhadas (não anônimas) devem geralmente ser estático?
Ou, em outras palavras: existe uma razão convincente para alguém preferir uma classe interna aninhada?