In Java können verschachtelte Klassen entweder static
oder nicht. Wenn sie es sind static
enthalten sie keinen Verweis auf den Zeiger der enthaltenden Instanz (sie werden auch nicht mehr als innere Klassen bezeichnet, sondern als verschachtelte Klassen).
Vergessen, eine verschachtelte Klasse zu erstellen static
wenn es diesen Verweis nicht benötigt, kann zu Problemen mit der Garbage Collection oder der Escape-Analyse führen.
Ist es möglich, eine anonyme innere Klasse zu erstellen static
auch? Oder findet der Compiler dies automatisch heraus (was er könnte, da es keine Unterklassen geben kann)?
Wenn ich zum Beispiel einen anonymen Komparator erstelle, brauche ich den Verweis nach außen fast nie:
Collections.sort(list, new Comparator<String>(){
int compare(String a, String b){
return a.toUpperCase().compareTo(b.toUpperCase());
}
}