Какую магию делает object.getClass() в Java возвращать типизированный экземпляр класса?

В Java Object.getClass имеет подпись типа public final Class<?> getClass(), но комментарий JavaDoc упоминает, что это действительно будет "Class<? extends |X|>, где | X | - стирание статического типа выражения, на котором getClass называется".

Это действительно так и применяется компилятором, поддерживаемым IDE: s и т.д., но какая магия делает этот тик? Разрабатывает ли компилятор этот метод особым образом? Действительно ли это генерирует переопределение getClass() для каждого типа?

Я понимаю, что это только конструкция времени компиляции, во время выполнения не будет иметь никакого значения, каков параметр generic type класса/.

Ответы

Ответ 1

Да, компилятор рассматривает метод специально. Например, см. Вызовы createGetClassMethod() в компиляторе Eclipse в классе Scope. (Есть несколько других вызовов этого метода в том же классе.)