Em Java, as classes aninhadas podem ser staticou não. Se estiverem static, não contêm uma referência ao ponteiro da instância que os contém (eles também não são mais chamados de classes internas, são chamados de classes aninhadas).
Esquecer de criar uma classe aninhada staticquando não precisar dessa referência pode levar a problemas com a coleta de lixo ou a análise de escape.
É possível criar uma classe interna anônima statictambém? Ou o compilador descobre isso automaticamente (o que poderia acontecer, porque não pode haver nenhuma subclasse)?
Por exemplo, se eu fizer um comparador anônimo, quase nunca preciso da referência externa:
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 o Java 2, leia-se, já que a API de coleção existe ...