Questa domanda riguarda la possibilità di fare in modo che una classe nidificata in Java sia una classe nidificata statica o una classe nidificata interna. Ho cercato qui e su Stack Overflow, ma non ho potuto trovare alcuna domanda riguardante le implicazioni del design di questa decisione.
Le domande che ho trovato mi fanno domande sulla differenza tra classi nidificate statiche e interne, il che è chiaro per me. Tuttavia, non ho ancora trovato una ragione convincente per usare mai una classe nidificata statica in Java - con l'eccezione delle classi anonime, che non considero per questa domanda.
Ecco la mia comprensione dell'effetto dell'uso di classi nidificate statiche:
- Meno accoppiamenti: generalmente otteniamo un minore accoppiamento, in quanto la classe non può accedere direttamente agli attributi della classe esterna. Meno accoppiamento generalmente significa migliore qualità del codice, test più semplice, refactoring, ecc.
-
Singolo
Class
: Il caricatore di classi non deve occuparsi di una nuova classe ogni volta, noi creiamo un oggetto della classe esterna. Riceviamo semplicemente nuovi oggetti per la stessa classe più e più volte.
Per una classe interiore, trovo generalmente che le persone considerino un accesso agli attributi della classe esterna come un professionista. Mi permetto di dissentire da questo punto di vista dal punto di vista del design, dato che questo accesso diretto implica un elevato accoppiamento e se vogliamo estrarre la classe nidificata nella sua classe separata di livello superiore, possiamo farlo solo dopo esserci sostanzialmente girati in una classe nidificata statica.
Quindi la mia domanda si riduce a questo: ho torto nell'assumere che l'accesso agli attributi disponibile per le classi interne non statiche conduca ad un elevato accoppiamento, quindi a una minore qualità del codice, e che deduco da ciò che (non anonimo) le classi annidate dovrebbero generalmente essere statiche?
O in altre parole: esiste una ragione convincente per cui si preferirebbe una classe interna annidata?