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?

È stato utile?

Soluzione

Questa classe è stato creato al fine di fornire l'accesso al costruttore privato.

Date un'occhiata a questo domanda per i dettagli.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top