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

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

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

2 ответов


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


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

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

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

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

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

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

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

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