En Java, las clases anidadas pueden ser static
o no. Si lo son static
, no contienen una referencia al puntero de la instancia que lo contiene (ya no se llaman clases internas, se llaman clases anidadas).
Olvidar hacer una clase anidada static
cuando no necesita esa referencia puede ocasionar problemas con la recolección de basura o el análisis de escape.
¿Es posible hacer una clase interna anónima static
también? ¿O el compilador resuelve esto automáticamente (que podría, porque no puede haber ninguna subclase)?
Por ejemplo, si hago un comparador anónimo, casi nunca necesito la referencia al exterior:
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)
funciona desde Java 2, lea, ya que existe la API de colección ...