16

在 Java 中,Object.getClass类型签名为public final Class<?> getClass(),但 JavaDoc 注释中提到它实际上是“Class<? extends |X|>其中 |X| 是getClass被调用的表达式的静态类型的擦除”。

确实是这种情况,并且由编译器强制执行,并由 IDE:s 等支持,但是是什么魔法使这个滴答作响?编译器是否以特殊方式处理此方法?它实际上是否getClass()为每种类型生成覆盖?

我知道这只是一个编译时构造,在运行时它不会有任何区别 Class 的泛型类型参数是/曾经是什么。

4

1 回答 1

10

是的,编译器特别对待该方法。例如,请参阅createGetClassMethod()Eclipse 编译器中Scope类的调用。(在同一个类中还有一些其他对该方法的调用。)

于 2013-09-17T16:55:02.143 回答