Java: синтезированные конструкторы закрытого внутреннего класса [дубликаты]

На этот вопрос уже есть ответ здесь:

Почему анонимный внутренний класс не содержит ничего, сгенерированного из этого кода? 5 ответов

у меня естьOuter класс, который имеетprivate Inner учебный класс.

В моемOuter метод класса, я создаю экземплярInner Класс следующим образом:

Outer outer = new Outer();
Inner inner = outer.new Inner();

Компилятор преобразует этот код в:

Outer outer = new Outer();
Inner inner = new Inner(outer, null);

Использование отражения показывает, чтоInner Класс имеет следующие синтезированные конструкторы:

private Outer$Inner(Outer)
Outer$Inner(Outer,Outer$Inner)

ПосколькуInner классprivateКомпилятор добавляет, чтоprivate конструктор, чтобы никто не мог создать экземпляр этого класса. Но очевидноOuter класс должен иметь возможность его создания, поэтому компилятор добавляет этот частный конструктор другого пакета, который в свою очередь вызывает частный конструктор. Кроме того, так как у конструктора пакета есть$ в своем названии обычный код Java может 'не могу это назвать.

Вопрос: зачем синтезировать один закрытый и один частный конструктор пакетов? Почему бы не синтезировать только конструктор частного пакета и покончить с этим?

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

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