Le classi interne sono più comunemente usate per oggetti che agiscono direttamente sulla classe che li include. Un eccellente esempio di questo è iteratori. Crei un'implementazione personalizzata di Iterator all'interno della tua classe contenitore e ne restituisci un'istanza nel getIterator()
o in qualsiasi metodo. Questo iteratore ha accesso a tutti i metodi e i campi di quel contenitore, che possono rendere più semplice l'implementazione di remove()
, ad esempio. Inoltre, l'iteratore è unico per quella classe, ma è un'implementazione di un'interfaccia pubblica esterna, quindi ha senso che sia nascosto come una classe interiore.
Vorrei applicare queste domande al tuo esempio. Se la risposta a qualcuno di questi è no, consiglierei di fare in modo che la classe sia indipendente.
-
È unico per la tua classe? Cioè, qualsiasi altra classe può utilizzare questo convertitore?
- Ha bisogno di accedere ai campi privati della classe che li include?
-
È un'implementazione personalizzata di un'interfaccia pubblica esistente a cui non si dovrebbe mai accedere in alcun modo se non attraverso quell'interfaccia? Se è così, non ha davvero senso renderlo una classe pubblica di sua proprietà. Come nell'esempio di Iterator, puoi restituire l'interfaccia senza alcun accenno alla struttura sottostante. Buona incapsulamento.
Penso che il tuo esempio fallisca con il numero 2 e probabilmente anche con il numero 1, poiché opera su dati non specifici della classe di chiusura. Non conosco il terzo; informazioni insufficienti. Non lo farei una classe interiore. Se vuoi davvero limitare l'accesso alla classe, rendi il pacchetto privato (dichiarato con class
, non public class
) - quindi è possibile accedervi solo all'interno del pacchetto.