Вопрос по anonymous-class, language-implementation, private, java – Закрытый внутренний класс синтезирует неожиданный анонимный класс

5

Когда вы компилируете класс 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() называется.

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

Ваш Ответ

1   ответ
5

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

Взгляни наэтот вопрос для деталей.

Похожие вопросы