Ответ 1
В Java есть один метакласс: экземпляры класса Class
используются для представления типов классов и интерфейсов. Конструкторы определяются на уровне класса, а не на уровне метакласса.
То, как я это понимаю, объектная модель Java - это 3 уровня, каждый уровень описывает уровень под ним, поэтому есть один мета-класс, разделяемый всеми классами (которые сами являются объектами?).
Мой вопрос: как реализуются конструкторы на Java? (или любые другие методы класса), моя логика говорит, что конструкторы должны появляться в классах Meta, но поскольку существует только один класс Meta, не имеет никакого смысла, что он поддерживает все возможные конструкторы, или мое понимание этого - все неправильно..
В Java есть один метакласс: экземпляры класса Class
используются для представления типов классов и интерфейсов. Конструкторы определяются на уровне класса, а не на уровне метакласса.
В вашем вопросе нет ничего особенного в конструкторах: с точки зрения описания классов на металисте существует одно и то же понятие для конструкторов, "нормальных методов" и полей.
Подумайте об этом так:
Каждый класс в 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?) Метакласса описывают отдельные классы, включая сам метакласс. Описание конструктора является частью экземпляров метакласса.