日期:2014-05-20  浏览次数:20804 次

java泛型如何得到T的class
如题,如何得到泛型中的T的class呢?
在单个类中,没有继承。
比如:

class A<T> {
    
}

在A类中,如何得到T的class呢,、
java class

------解决方案--------------------
这是一个非常奇怪的设计。

如果你试图获取泛型参数的具体类型,你还不如不用泛型,而直接把类型对象作为一个变量传进来。

泛型的魅力就在于对于它支持的类型“一视同仁”。
------解决方案--------------------
不继承,貌似不能。

class B extends T<X> {
}

这种情况,即使在A里面写代码,也是能够获取X的具体信息的。

之所以这种方式可以,那是因为在编译的时候,<X>的信息,已经编译到了B.class里面,成为了B.class的一部分。而你new A<X>()或者new A<Y>()的时候,<X><Y>只存在于运行期,并没有被编译到A.class里面。所以无法反射出来
------解决方案--------------------
引用:
这是一个非常奇怪的设计。

如果你试图获取泛型参数的具体类型,你还不如不用泛型,而直接把类型对象作为一个变量传进来。

泛型的魅力就在于对于它支持的类型“一视同仁”。
这位仁兄说的对头,之所以只用泛型就是因为在某些地方我们不知道或者不想知道具体的参数类型信息而笼统的把他认为是某个类型T/E之类的,这样能够是方法变得灵活通用等等;比如之前有段时间我写的一些与数据库操作的方法

public <T> T simplquery(String querysql, ResultSetCallBackInf<T> callback,
String... param) throws SQLException {
ResultSet rs = null;
rs = dbUtil.simplquery(querysql, param);
return callback.RsCallback(rs);
}

在实际开发中我们需要用同一个方法来操作所有的业务bean(增删改查),而bean类不可能就一个所以需要使用泛型来处理,这就是泛型的优点
------解决方案--------------------
引用:
引用:
这是一个非常奇怪的设计。

如果你试图获取泛型参数的具体类型,你还不如不用泛型,而直接把类型对象作为一个变量传进来。

泛型的魅力就在于对于它支持的类型“一视同仁”。这位仁兄说的对头,之所以只用泛型就是因为在某些地方我们不知道或者不想知道具体的参数类型信息而笼统的把他认为是某个类型T/E之类的,这样能够是方法变得灵活通用等等;比如之前有段时间我写的一……

学习了
------解决方案--------------------
这样在实例化Network<T>的时候,T是什么类型,你在graphTest(T t)通过 t.getClass()得到的不就是什么类型。 这样不是你传什么类型的类都可以。不符合你的要求?