Cuando compila una clase Java con una clase interna privada, parece que una clase anónima se sintetiza automáticamente junto con ella por algún motivo. Esta clase es suficiente para reproducirlo:Clase interna privada sintetiza clase anónima inesperada
public class SynthesizeAnonymous {
public static void method() {
new InnerClass();
}
private static class InnerClass {}
}
cuando se compila, esto genera los esperados y SynthesizeAnonymous.class
SynthesizeAnonymous$InnerClass.class
archivos, sino que también genera un archivo extraño SynthesizeAnonymous$1.class
que corresponde a una subclase anónima de java.lang.Object
que fue sintetizado. Si observa el desmontaje con javap
, parece que el constructor predeterminado de InnerClass
obtiene un parámetro oculto de este tipo anónimo, y que se le pasa null
cuando se llama al new InnerClass()
.
¿Por qué se crea esta clase? Se crea incluso si InnerClass
no es estático, pero no se crea si InnerClass
no es privado o no se crea ninguna instancia de InnerClass
. ¿Es alguna forma de control de acceso? ¿Cómo funciona?