Prywatna klasa wewnętrzna syntetyzuje nieoczekiwaną anonimową klasę

Kiedy kompilujesz klasę Java z prywatną klasą wewnętrzną, wydaje się, że anonimowa klasa jest automatycznie syntetyzowana wraz z nią z jakiegoś powodu. Ta klasa jest wystarczająca do jej odtworzenia:

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

    private static class InnerClass {}
}

Po skompilowaniu generuje oczekiwaneSynthesizeAnonymous.class iSynthesizeAnonymous$InnerClass.class pliki, ale generuje też dziwneSynthesizeAnonymous$1.class plik, który odpowiada anonimowej podklasiejava.lang.Object który został zsyntetyzowany. Jeśli spojrzysz na demontaż za pomocąjavap, wydaje się domyślnym konstruktoremInnerClass uzyskuje ukryty parametr tego anonimowego typu i tonull jest przekazywane do niego, gdynew InnerClass() jest nazywany.

Dlaczego ta klasa jest tworzona? Jest tworzony, nawet jeśliInnerClass nie jest statyczny, ale nie jest tworzony, jeśliInnerClass nie jest prywatny lub nie ma instancjiInnerClass jest kiedykolwiek stworzony. Czy jest to jakaś forma kontroli dostępu? Jak to działa?

questionAnswers(1)

yourAnswerToTheQuestion