在 Java 中对于下面最简单的泛型类
class A<T> {
public void foo() { //如何在此处获得运行时 T 的具体类型呢? } }
设想我们使用时
new A<String>().foo();
是否能在 foo()
方法中获得当前的类型是 String 呢?答案是否定的,不能。在 foo()
方法中 this 引用给不出类型信息,this.getClass()
就更不可能了,因为 Java 的泛型不等同于 C++ 的模板类,this.getClass()
实例例是被所有的不同具体类型的 A 实例(new A<String>(), new A<Integer>() 等) 共享的,所以在字节码中类型会被擦除到上限。
我们可以在 IDE 的调试时看到这个泛型类的签名