什么魔术使Java中的object.getClass()返回一个类型化的Class实例?

Sof*_*mes 16 java generics

在Java中,Object.getClass有一个类型签名public final Class<?> getClass(),但JavaDoc注释提到它实际上是" Class<? extends |X|>where | X |是getClass被称为" 的表达式的静态类型的擦除".

这确实是这种情况并由IDE支持的编译器执行:s等,但是有什么神奇之处呢?编译器是否以特殊方式处理此方法?它是否实际生成了getClass()每种类型的覆盖?

我知道这只是一个编译时构造,在运行时它不会对Class的泛型类型参数有什么影响.

Bre*_*ail 10

是的,编译器会特别处理该方法.例如,请参阅ScopecreateGetClassMethod()中Eclipse编译器中的调用.(在同一个类中还有一些其他调用此方法.)

  • 请注意,此方法在JLS中特别调用,并带有输入要求:[JLS 4.3.2](http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html #JLS-4.3.2) (3认同)