Clase interna privada sintetiza clase anónima inesperada

Cuando compilas una clase Java con una clase interna privada, parece que una clase anónima se sintetiza automáticamente junto con ella por alguna razón. Esta clase es suficiente para reproducirla:

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

    private static class InnerClass {}
}

Cuando se compila, esto genera el esperadoSynthesizeAnonymous.class ySynthesizeAnonymous$InnerClass.class archivos, pero también genera un extrañoSynthesizeAnonymous$1.class archivo que corresponde a una subclase anónima dejava.lang.Object Eso fue sintetizado. Si nos fijamos en el desmontaje conjavap, aparece el constructor por defecto deInnerClass gana un parámetro oculto de este tipo anónimo, y quenull se le pasa cuando elnew InnerClass() se llama.

¿Por qué se crea esta clase? Se crea incluso siInnerClass no es estático, pero no se crea siInnerClass no es privado o no hay instancia deInnerClass siempre se crea ¿Es alguna forma de control de acceso? ¿Cómo funciona?

Respuestas a la pregunta(1)

Su respuesta a la pregunta