Esta pregunta es sobre si hacer que una clase anidada en Java sea una clase anidada estática o una clase anidada interna. Busqué por aquí y en Stack Overflow, pero realmente no pude encontrar ninguna pregunta sobre las implicaciones de diseño de esta decisión.
Las preguntas que encontré son sobre la diferencia entre clases anidadas estáticas e internas, lo cual es claro para mí. Sin embargo, todavía no he encontrado una razón convincente para usar una clase anidada estática en Java, con la excepción de las clases anónimas, que no considero para esta pregunta.
Aquí entiendo el efecto del uso de clases anidadas estáticas:
- Menos acoplamiento: generalmente obtenemos menos acoplamiento, ya que la clase no puede acceder directamente a los atributos de su clase externa. Menos acoplamiento generalmente significa mejor calidad de código, pruebas más fáciles, refactorización, etc.
- Individual
Class
: el cargador de clases no necesita ocuparse de una nueva clase cada vez, creamos un objeto de la clase externa. Simplemente obtenemos nuevos objetos para la misma clase una y otra vez.
Para una clase interna, generalmente encuentro que las personas consideran el acceso a los atributos de la clase externa como un profesional. Ruego diferir en este aspecto desde el punto de vista del diseño, ya que este acceso directo significa que tenemos un alto acoplamiento y si alguna vez queremos extraer la clase anidada en su clase separada de nivel superior, solo podemos hacerlo después de esencialmente girar en una clase anidada estática.
Entonces, mi pregunta se reduce a esto: ¿Me equivoco al suponer que el acceso al atributo disponible para las clases internas no estáticas conduce a un alto acoplamiento, por lo tanto, a una menor calidad del código, y que deduzco de esto que las clases anidadas (no anónimas) deberían generalmente ser estático?
O en otras palabras: ¿hay alguna razón convincente por la que uno preferiría una clase interna anidada?