Questa domanda riguarda se 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 sono riuscito a trovare alcuna domanda in merito alle implicazioni di progettazione di questa decisione.
Le domande che ho trovato pongono sulla differenza tra classi annidate statiche e interne, il che mi è chiaro. Tuttavia, non ho ancora trovato un motivo convincente per usare mai una classe annidata statica in Java, ad eccezione delle classi anonime, che non considero per questa domanda.
Ecco la mia comprensione dell'effetto dell'utilizzo di classi nidificate statiche:
- Meno accoppiamento: generalmente si ottiene meno accoppiamento, poiché la classe non può accedere direttamente agli attributi della sua classe esterna. Meno accoppiamento generalmente significa migliore qualità del codice, test più facili, refactoring, ecc.
- Singolo
Class
: il caricatore di classi non deve occuparsi di una nuova classe ogni volta, creiamo un oggetto della classe esterna. Riceviamo sempre nuovi oggetti per la stessa classe ancora e ancora.
Per una classe interna, generalmente trovo che le persone considerino un professionista l'accesso agli attributi della classe esterna. Mi permetto di differire da questo punto di vista dal punto di vista del design, poiché questo accesso diretto significa che abbiamo un elevato accoppiamento e se vogliamo mai estrarre la classe nidificata nella sua classe di livello superiore separata, possiamo farlo solo dopo aver essenzialmente girato in una classe nidificata statica.
Quindi la mia domanda si riduce a questo: sbaglio nel presumere che l'accesso all'attributo disponibile alle classi interne non statiche porti a un elevato accoppiamento, quindi a una qualità del codice inferiore, e che deduco da ciò che le classi nidificate (non anonime) dovrebbero generalmente essere statico?
O in altre parole: c'è una ragione convincente per cui si preferirebbe una classe interiore nidificata?