Реализация Java-метаклассы
Как я понимаю, объектная модель Java-это 3 уровня, каждый уровень описывает уровень под ним, поэтому есть один мета-класс, разделяемый всеми классами (которые сами являются объектами?).
мой вопрос - как конструкторы реализованы в Java? (или любые другие методы класса) моя логика говорит, что конструкторы должны появляться в мета-классах, но поскольку существует только один мета-класс, не имеет никакого смысла, что он сохраняет все возможные конструкторы или является моим понимание всего этого неверно..
2 ответов
в Java есть один метакласс: экземпляры класса Class
используются для представления типов, классов и интерфейсов. Конструкторы определяются на уровне класса, а не на уровне метакласса.
в вашем вопросе нет ничего особенного о конструкторах: с точки зрения описания классов на металлическом уровне существует та же концепция для конструкторов, "нормальных методов" и полей.
так что подумайте об этом так:
-
каждого класс в Java описывается определенным набором информации:
- имя класса
- суперкласс
- реализованные интерфейсы
- список конструкторов и их подписи
- список (статических и нестатических) методов и их сигнатур
- список (статических и нестатических) полей и их типов
для вашего удобства эта информация доступна во время выполнения - это "API рефлексии".
поскольку один и тот же тип информации доступен для каждого класса, загруженного JVM, это входит в собственный класс с именем
java.lang.Class
.один экземпляр класса
Class
описывает классjava.lang.String
, другой экземпляр ofClass
описаниеmy.own.class.Foo
.java.lang.Class
сам по себе, конечно, также класс - поэтому также существует экземпляр ofClass
описание классаClass
. И я думаю, что именно там все становится рекурсивным. как-то.
резюме: существует только один метакласс:java.lang.Class
. Несколько экземпляров (мета-экземпляр?) метакласса описывают отдельные классы-включая сам метакласс. Конструктор описания являются частью экземпляров метакласса.