classe interna privata sintetizza classe anonima inaspettato
-
13-09-2019 - |
Domanda
Quando si compila una classe Java con una classe interna privata, sembra che una classe anonima è sintetizzata automaticamente con esso per qualche motivo. Questa classe è sufficiente per riprodurlo:
public class SynthesizeAnonymous {
public static void method() {
new InnerClass();
}
private static class InnerClass {}
}
Quando compilato, questo genera i file SynthesizeAnonymous.class
e SynthesizeAnonymous$InnerClass.class
attesi, ma genera anche un file SynthesizeAnonymous$1.class
strano che corrisponde ad una sottoclasse anonima di java.lang.Object
che è stato sintetizzato. Se si guarda lo smontaggio con javap
, sembra che il costruttore di default di InnerClass
guadagna un parametro nascosto di questo tipo anonimo, e che null
viene passato quando il new InnerClass()
viene chiamato.
Perché si crea questa classe? E 'creato anche se InnerClass
non è statica, ma non viene creato se InnerClass
non è privata o nessuna istanza di InnerClass
viene mai creato. E 'una forma di controllo di accesso? Come funziona?
Soluzione
Questa classe è stato creato al fine di fornire l'accesso al costruttore privato.
Date un'occhiata a questo domanda per i dettagli.