It cannot be meaningful as enclosing class is not completely defined at the time of the declaration of its object.
Quindi cosa? Se seguo la tua logica, non può essere significativo all'interno di un metodo di una classe dichiarare un oggetto della classe che lo include, per lo stesso motivo.
Sembra che tu abbia frainteso la differenza tra compilazione e tempo di esecuzione. Quando il codice sorgente viene analizzato per essere compilato e il tokenizzatore elabora B
, allora, infatti, A
potrebbe non essere ancora completamente definito. In modo simile, quando A
contiene un metodo hello()
che chiama world()
, il tokenizzatore può elaborare il primo metodo mentre il secondo non esiste ancora.
In fase di esecuzione, tuttavia, esistono sia A
che B
. Puoi fare in modo che Reflection elenchi i propri membri e puoi chiamare B
da A
e A
da B
senza alcun problema.
My understanding is that since the enclosing class cannot access members of the nested class
È sbagliato. Non solo la classe che acclude può accedere ai membri della classe nidificata, ma può anche accedervi troppi , qualcosa che non è particolarmente intuitivo in Java.
L'obiettivo delle classi nidificate è di essere in grado di creare tipi che abbiano senso solo all'interno della classe genitore. Ad esempio, se la classe A
utilizza strutture dati temporanee durante l'elaborazione di alcuni dati e quelle strutture sono troppo specifiche per la classe A
e non vengono mai utilizzate al di fuori di essa, la creazione di classi aggiuntive che inquinano lo spazio dei nomi è piuttosto sfortunata; invece, inseriscili nella classe A
e rendili privati.