在Java中,Object.getClass
的类型签名为public final Class<?> getClass()
,但JavaDoc注释提到它真的是" Class<? extends |X|>
哪里 |X|是调用getClass
的表达式的静态类型的擦除"。
编译器强制执行,由 IDE:s 等提供支持,但是是什么魔术使它打勾?编译器是否以特殊方式处理此方法?它实际上是否为每种类型生成getClass()
的覆盖?
我知道这只是一个编译时构造,在运行时它不会对类的泛型类型参数是什么/曾经产生任何影响。
是的,编译器会特别处理该方法。 例如,请参阅 Scope 类中 Eclipse 编译器中对createGetClassMethod()
的调用。 (在同一类中还有其他一些对此方法的调用。