Private innere Klasse synthetisiert unerwartete anonyme Klasse

Wenn Sie eine Java-Klasse mit einer privaten inneren Klasse kompilieren, wird aus irgendeinem Grund automatisch eine anonyme Klasse mitsynthetisiert. Diese Klasse reicht aus, um es zu reproduzieren:

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

    private static class InnerClass {}
}

Beim Kompilieren wird das erwartete Ergebnis generiertSynthesizeAnonymous.class undSynthesizeAnonymous$InnerClass.class Dateien, aber es erzeugt auch eine seltsameSynthesizeAnonymous$1.class Datei, die einer anonymen Unterklasse von entsprichtjava.lang.Object das wurde synthetisiert. Wenn Sie die Demontage mit ansehenjavap, es scheint der Standardkonstruktor vonInnerClass gewinnt einen versteckten Parameter dieses anonymen Typs und dasnull wird an ihn übergeben, wenn dernew InnerClass() wird genannt.

Warum wurde diese Klasse erstellt? Es ist geschaffen, auch wennInnerClass ist nicht statisch, wird aber nicht erstellt, wennInnerClass ist nicht privat oder keine Instanz vonInnerClass wird jemals geschaffen. Ist es eine Form der Zugangskontrolle? Wie funktioniert das?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage