Cette question concerne l’opportunité de transformer une classe imbriquée en Java en classe imbriquée statique ou en classe imbriquée interne. J'ai cherché ici et sur Stack Overflow, mais je n'ai trouvé aucune question concernant les implications de cette décision sur la conception.
Les questions que j'ai trouvées portent sur la différence entre les classes imbriquées statique et interne, ce qui est clair pour moi. Cependant, je n'ai pas encore trouvé de raison convaincante d'utiliser une classe imbriquée statique en Java - à l'exception des classes anonymes, que je ne considère pas pour cette question.
Voici ma compréhension de l'effet de l'utilisation de classes imbriquées statiques:
- Moins de couplage: Nous obtenons généralement moins de couplage, car la classe ne peut pas accéder directement aux attributs de sa classe externe. Moins de couplage signifie généralement une meilleure qualité de code, des tests plus faciles, une refactorisation, etc.
- Single
Class
: le chargeur de classe n'a pas besoin de s'occuper d'une nouvelle classe à chaque fois, nous créons un objet de la classe externe. Nous obtenons simplement de nouveaux objets pour la même classe, encore et encore.
Pour une classe interne, je trouve généralement que les gens considèrent l'accès aux attributs de la classe externe comme un pro. Je me démarquerai à cet égard du point de vue de la conception, car cet accès direct signifie que nous avons un couplage élevé et que si nous voulons jamais extraire la classe imbriquée dans sa classe de premier niveau séparée, nous ne pourrons le faire qu'après avoir tourné. dans une classe imbriquée statique.
Ma question se résume donc à ceci: ai-je tort de supposer que l'accès aux attributs disponible pour les classes internes non statiques conduit à un couplage élevé, donc à une qualité de code inférieure, et j'en déduis que des classes imbriquées (non anonymes) devraient généralement être statique?
Ou en d'autres termes: existe-t-il une raison convaincante de préférer une classe interne imbriquée?