首页 新闻 会员 周边

求解:关于实例化泛型的类型参数

0
悬赏园豆:50 [已解决问题] 解决于 2014-04-22 11:27
泛型类
public  class Generic<T>{
    private Class<T> persistentClass;
    public Generic(){
         System.out.println(this.getClass());
         System.out.println(this.getClass().getGenericSuperclass());
          this.persistentClass = ((Class<T>) ((ParameterizedType) this.getClass()
                   .getGenericSuperclass()).getActualTypeArguments()[0]);
    }
}
测试类
public class Test extends Generic<Person>{
   public static void main(String[] args) {
                    Test test= new Test();
        }
}
问题:
1、第一行输出的结果为什么会是  Test 而不是Generic
2、谁能告诉我实例化类型参数的那行代码为什么要使用getGenericSuperclass()这个方法啊,不适用这个方法的话有没有办法实例化类型参数啊?
 
谢谢大神们赐教,小弟是菜鸟
一剑十年的主页 一剑十年 | 初学一级 | 园豆:8
提问于:2014-04-22 08:49
< >
分享
最佳答案
0

1.因为Test继承了Generic<Person>,这时候Generic<Person>是Test的父类,他们2个不相等的,你用的Test实例调用的GetClass,返回的自然是Test

2.问题没看明白,是说要取得T在这个实现中被指定的值Person吗?

收获园豆:50
吴瑞祥 | 高人七级 |园豆:29449 | 2014-04-22 10:44

1、用的Test实例调用的GetClass,这个是什么意思啊,getclass这个方法不是在Generic的构造方法中写的吗?

2、对,现在的代码如果执行System.out.println(persistentClass.getName());时打印的是person,能给详细的解释下这个实例化参数类型的代码的意思嘛,

谢谢啦

一剑十年 | 园豆:8 (初学一级) | 2014-04-22 10:49

@一剑十年: 你现在是在学习泛型,也就是概念没搞清楚是吗?

测试类

public class Test extends Generic<Person> 这就是我1说的了
 
吴瑞祥 | 园豆:29449 (高人七级) | 2014-04-22 11:02

@吴瑞祥: 是有点迷糊,能给点建议吗,或者指点一下关于泛型的知识

一剑十年 | 园豆:8 (初学一级) | 2014-04-22 11:07

@一剑十年: 泛型在C++里就是模版类,其实以模板类来理解会更容易点.

就是定义一个模版,实现的时候再指定类型,这样能实现代码重用.

定义时泛型类是不存在的,他只是一个模版,只有给他指定一个泛型参数时,他才会生成一个类型.

这样泛型能明白不?

吴瑞祥 | 园豆:29449 (高人七级) | 2014-04-22 11:11

@吴瑞祥: 嗯,这个明白。谢谢啦,刚才细想了一下我问的问题,发现那会进死胡同了,这会想明白啦,谢谢a,还有啥能指点一下小弟不,想深入学习java

一剑十年 | 园豆:8 (初学一级) | 2014-04-22 11:21

@一剑十年: 这些东西都是面向对象的东西,哪门语言都差不多的.java我没解除过不太了解,你还是好好找本教科书看完最好了.我就是看教科书学的这些东西

吴瑞祥 | 园豆:29449 (高人七级) | 2014-04-22 11:26

@吴瑞祥: 嗯,行,谢谢啊

一剑十年 | 园豆:8 (初学一级) | 2014-04-22 11:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册