A classe interna privada sintetiza uma classe anônima inesperada

Quando você compila uma classe Java com uma classe interna privada, parece que uma classe anônima é automaticamente sintetizada junto com ela por algum motivo. Esta classe é suficiente para reproduzi-lo:

public class SynthesizeAnonymous {
    public static void method() {
        new InnerClass();
    }

    private static class InnerClass {}
}

Quando compilado, isso gera o esperadoSynthesizeAnonymous.class eSynthesizeAnonymous$InnerClass.class arquivos, mas também gera um estranhoSynthesizeAnonymous$1.class arquivo que corresponde a uma subclasse anônima dejava.lang.Object que foi sintetizado. Se você olhar para a desmontagem comjavap, aparece o construtor padrão deInnerClass ganha um parâmetro oculto deste tipo anônimo, e quenull é passado para ele quando onew InnerClass() é chamado.

Por que essa classe é criada? É criado mesmo seInnerClass não é estático, mas não é criado seInnerClass não é privado ou nenhuma instância deInnerClass é sempre criado. É alguma forma de controle de acesso? Como isso funciona?

questionAnswers(1)

yourAnswerToTheQuestion