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?