首页 新闻 会员 周边 捐助

求教关于Java泛型的问题,多谢各位大虾!请高手看过来!

0
悬赏园豆:50 [已关闭问题] 关闭于 2012-05-30 14:44

下面有一段简单的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的类型信息呢?

醉三郎的主页 醉三郎 | 初学一级 | 园豆:154
提问于:2012-05-27 16:35
< >
分享
所有回答(1)
0

java中的多态,object中有成员函数getclass(),Java是单根继承,Integer是Object的子类,在里面重写了Object类里的getclass()函数,在运行时候,由于Java的多态机制,向上转型的过程中,会调用子类的重载的重写的方法

 

 

星空雾雨 | 园豆:311 (菜鸟二级) | 2012-05-27 19:31

关键的问题是,由于java泛型的擦除机制,它不应该知道ob是Integer类型的呀?困惑!

支持(0) 反对(0) 醉三郎 | 园豆:154 (初学一级) | 2012-05-27 19:39

@醉三郎: 

支持(0) 反对(0) 星空雾雨 | 园豆:311 (菜鸟二级) | 2012-05-27 19:58
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册