Подтвердить что ты не робот

Реализация Java - мета-классы

То, как я это понимаю, объектная модель Java - это 3 уровня, каждый уровень описывает уровень под ним, поэтому есть один мета-класс, разделяемый всеми классами (которые сами являются объектами?).

Мой вопрос: как реализуются конструкторы на Java? (или любые другие методы класса), моя логика говорит, что конструкторы должны появляться в классах Meta, но поскольку существует только один класс Meta, не имеет никакого смысла, что он поддерживает все возможные конструкторы, или мое понимание этого - все неправильно..

4b9b3361

Ответ 1

В Java есть один метакласс: экземпляры класса Class используются для представления типов классов и интерфейсов. Конструкторы определяются на уровне класса, а не на уровне метакласса.

Ответ 2

В вашем вопросе нет ничего особенного в конструкторах: с точки зрения описания классов на металисте существует одно и то же понятие для конструкторов, "нормальных методов" и полей.

Подумайте об этом так:

  • Каждый класс в Java описывается определенным набором информации:

    • Название класса
    • суперкласс
    • реализованные интерфейсы
    • список конструкторов и их подписи
    • список (статических и нестатических) методов и их подписи
    • список (статических и нестатических) полей и их типов
  • Для вашего удобства эта информация доступна вам во время выполнения - это "API отражения".

  • Поскольку тот же тип информации доступен для каждого класса, загружаемого JVM, он входит в собственный класс с именем java.lang.Class.

  • Итак, один экземпляр класса Class описывает класс java.lang.String, другой экземпляр Class описывает my.own.class.Foo.

  • java.lang.Class сам, конечно, также является классом, поэтому существует также экземпляр Class, описывающий класс Class. И я думаю, что где-то все рекурсивно.

Сводка: существует только один метакласс: java.lang.Class. Несколько экземпляров (meta-instance?) Метакласса описывают отдельные классы, включая сам метакласс. Описание конструктора является частью экземпляров метакласса.