Em Java, as classes aninhadas podem ser static
ou 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 static
quando 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 static
també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 ...