Закрытый внутренний класс синтезирует неожиданный анонимный класс

Когда вы компилируете класс Java с закрытым внутренним классом, создается впечатление, что анонимный класс автоматически синтезируется вместе с ним по какой-то причине. Этого класса достаточно, чтобы воспроизвести его:

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

    private static class InnerClass {}
}

При компиляции это генерирует ожидаемыйSynthesizeAnonymous.class а такжеSynthesizeAnonymous$InnerClass.class файлы, но это также генерирует странныйSynthesizeAnonymous$1.class файл, который соответствует анонимному подклассуjava.lang.Object это было синтезировано. Если вы посмотрите на разборку сjavapПохоже, конструктор по умолчаниюInnerClass получает скрытый параметр этого анонимного типа, и этоnull передается ему, когдаnew InnerClass() называется.

Почему этот класс создан? Это's создан, даже еслиInnerClass ISN»не статично, но это не такт создан, еслиInnerClass ISN»т частный или не экземплярInnerClass когда-либо был создан. Это какая-то форма контроля доступа? Как это работает?

Ответы на вопрос(1)

Ваш ответ на вопрос