В Java вложенные классы могут быть либо static, либо нет. Если они static, они не содержат ссылки на указатель содержащего экземпляра (они также больше не называются внутренними классами, они называются вложенными классами).
Забывая сделать вложенный класс static, когда он не нуждается в этой ссылке, может привести к проблемам с сбором мусора или анализом утечки.
Возможно ли сделать анонимный внутренний класс static? Или компилятор автоматически определяет это (что могло бы быть, потому что не может быть никаких подклассов)?
Например, если я делаю анонимный компаратор, мне почти никогда не нужна ссылка на внешнюю сторону:
Collections.sort(list, new Comparator<String>(){
int compare(String a, String b){
return a.toUpperCase().compareTo(b.toUpperCase());
}
}