Ответ 1
Да, компилятор рассматривает метод специально. Например, см. Вызовы createGetClassMethod()
в компиляторе Eclipse в классе Scope. (Есть несколько других вызовов этого метода в том же классе.)
В Java Object.getClass
имеет подпись типа public final Class<?> getClass()
, но комментарий JavaDoc упоминает, что это действительно будет "Class<? extends |X|>
, где | X | - стирание статического типа выражения, на котором getClass
называется".
Это действительно так и применяется компилятором, поддерживаемым IDE: s и т.д., но какая магия делает этот тик? Разрабатывает ли компилятор этот метод особым образом? Действительно ли это генерирует переопределение getClass()
для каждого типа?
Я понимаю, что это только конструкция времени компиляции, во время выполнения не будет иметь никакого значения, каков параметр generic type класса/.
Да, компилятор рассматривает метод специально. Например, см. Вызовы createGetClassMethod()
в компиляторе Eclipse в классе Scope. (Есть несколько других вызовов этого метода в том же классе.)