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