下面有一段简单的Java泛型代码:
class GenClass<T>{
T ob;
GenClass(T o){
this.ob = o;
}
T getOb(){
return this.ob;
}
void showType(){
System.out.println("Type of T is " + ob.getClass().getName());
}
}
public class GenDemo {
public static void main(String args[]){
GenClass<Integer> iObject = new GenClass<Integer>(88);
iObject.showType();
}
}
这段代码的输出为:
Type of T is java.lang.Integer
这个输出结果有点出乎我的意料之外!
我的问题是,既然JVM在运行时已经将泛型信息擦除,那么就应该只知道ob是Object类型的, ob.getClass().getName())方法能够得到Integer的类型信息呢?
java中的多态,object中有成员函数getclass(),Java是单根继承,Integer是Object的子类,在里面重写了Object类里的getclass()函数,在运行时候,由于Java的多态机制,向上转型的过程中,会调用子类的重载的重写的方法
关键的问题是,由于java泛型的擦除机制,它不应该知道ob是Integer类型的呀?困惑!
@醉三郎: