如何获取泛型的类型

q1531 2009-03-01 10:10:31
public class Test<T>{
//...........
}

////////////////////

如何在Test里面获取T的类型?
比如当 Test<String> test=new Test<String>()
Test里面如何获取T就的String??
能不能获得?如何获得?
...全文
3235 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
JLegend 2011-12-16
  • 打赏
  • 举报
回复
给它一个父类或接口,用getGenericInterfaces()或getGenericSuperClass可以得到类型信息
JLegend 2011-12-16
  • 打赏
  • 举报
回复
给它一个父类或接口,用getGenericSuperclass或getGenericInterfaces()就可以获得类型信息
yingxiongtnt 2009-03-02
  • 打赏
  • 举报
回复
既然是范型那就是一种不能确定的类型。。。 所有的对象类型都可以,如果能获得的话,你所获得什么类型?String ?Date?
一种泛化的类型。。。。
shkly 2009-03-02
  • 打赏
  • 举报
回复
本来想用反射试试的,发现不行,Class.getTypeParameters得到的是T,查阅了文章才知道:Java编译器在编译的时候,同时生成针对擦除类型和泛化类型的两套字节码,而在运行时,JVM只使用擦除类型的字节码,泛化类型的字节码仅仅被用于反射! (引用自:http://tech.it168.com/j/2007-03-02/200703021013218_4.shtml)。所以不能在运行时动态的得到对象的类型化列表。不过也可以选择其他不太优雅的方式,比如:
public class Test <T>{
private Class type;
public Test1(Class type){
this.type = type;
}
public void print(){
System.out.println(type.getCanonicalName());
}
public static void main(String[] args) {
Test<String> t1 = new Test<String>(String.class);
t1.print();
Test<Integer> t2 = new Test<Integer>(Integer.class);
t2.print();
}
}
//out put
java.lang.String
java.lang.Object

也可是这样:
public class Test<T> {

List<T> lists = new ArrayList<T>();
public void add(T t){
lists.add(t);
System.out.println(t.getClass().getCanonicalName());
}
public static void main(String[] args) {
Test<String> t1 = new Test<String>();
t1.add("aaaaa");
Test<Integer> t2 = new Test<Integer>();
t2.add(new Integer(1));
}
}
//out put
java.lang.String
java.lang.Object
liang__ 2009-03-02
  • 打赏
  • 举报
回复
想不明白楼主为什么要这么做。。
kukufly 2009-03-02
  • 打赏
  • 举报
回复
不能 获取
shixin42 2009-03-02
  • 打赏
  • 举报
回复
应该不能获得!
chiphuo 2009-03-02
  • 打赏
  • 举报
回复
楼主要了解java中的泛型原理,不得不承认java的泛型确实比C++要差一些。
在java中,泛型类型只有在静态类型检查期间才出现,在此之后,程序中的所有泛型类型都将被擦出,替换为它们的非泛型上界。例如List <T>这样的类型注解将被擦除为List,而普通的类型变量在未指定边界的情况下将被擦出为Object。
qindequan 2009-03-02
  • 打赏
  • 举报
回复
如何在Test里面获取T的类型,想法挺好,但好像不行
qgmzhfj 2009-03-02
  • 打赏
  • 举报
回复
为什么要获取呢 ?
既然这个是你建立的,你指定是知道这个类型的啊 ?
wbo112 2009-03-02
  • 打赏
  • 举报
回复
不太清楚哦
gesanri 2009-03-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 java2000_net 的回复:]
参考我的文章吧。可以获得的。

Java获得泛型类class的方法和注意事项,ParameterizedType、getGenericSuperclass和getActualTypeArguments的使用
[/Quote]

这个是获得范型类class,跟楼主说的“Test里面如何获取T就的String”还是不大一样吧?
guoxyj 2009-03-02
  • 打赏
  • 举报
回复
up
fx8023jo 2009-03-02
  • 打赏
  • 举报
回复
T是你随意安排的类型,你既然已经都放String了。那么自然就是获得的String了。
uastation 2009-03-02
  • 打赏
  • 举报
回复
泛型是可以获取得到的..就是数组类型哪样.有方法可以的.查下API文档吧..
ZangXT 2009-03-01
  • 打赏
  • 举报
回复
不能获得。
shuanlarousi1 2009-03-01
  • 打赏
  • 举报
回复
既然是范型那就是一种不能确定的类型,一种泛化的类型
paullbm 2009-03-01
  • 打赏
  • 举报
回复
既然是范型那就是一种不能确定的类型。。。
一种泛化的类型。。。。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧