In Java, le classi nidificate possono essere static
o meno. Se lo sono static
, non contengono un riferimento al puntatore dell'istanza che lo contiene (inoltre non sono più chiamate classi interne, sono chiamate classi annidate).
Dimenticare di creare una classe annidata static
quando non ha bisogno di quel riferimento può portare a problemi con la raccolta dei rifiuti o l'analisi dell'escape.
È possibile creare anche una classe interna anonima static
? O il compilatore lo capisce automaticamente (cosa che potrebbe, perché non possono esserci sottoclassi)?
Ad esempio, se realizzo un comparatore anonimo, non ho quasi mai bisogno del riferimento all'esterno:
Collections.sort(list, new Comparator<String>(){
int compare(String a, String b){
return a.toUpperCase().compareTo(b.toUpperCase());
}
}
Collections.sort(list, String.CASE_INSENSITIVE_ORDER)
funziona da Java 2, leggi, poiché esiste l'API Collection ...