Реализация Java - мета-классы - PullRequest
12 голосов
/ 18 февраля 2012

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

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

Ответы [ 2 ]

14 голосов
/ 19 февраля 2012

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

8 голосов
/ 19 февраля 2012

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

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

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

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

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

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

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

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

...