在Java语言中,Object.getClass
的类型签名是public final Class<?> getClass()
,但是JavaDoc注释提到它实际上是"Class<? extends |X|>
,其中|X|是调用getClass
的表达式的静态类型的擦除“。
这确实是由编译器强制执行的,并由IDE等支持,但是是什么魔法让它滴答作响呢?编译器是否以特殊的方式处理此方法?它真的会为每种类型生成getClass()
的覆盖吗?
我知道这只是一个编译时构造,在运行时它不会对Class的泛型参数有任何影响。
发布于 2013-09-18 00:55:02
是的,编译器会特别对待这个方法。例如,请参阅在Scope类中的Eclipse编译器中调用createGetClassMethod()
。(在同一个类中还有一些对此方法的其他调用。)
https://stackoverflow.com/questions/18855347
复制相似问题