java泛型如何得到T的class

losetowin 2013-02-26 07:31:35
如题,如何得到泛型中的T的class呢?
在单个类中,没有继承。
比如:

class A<T> {

}

在A类中,如何得到T的class呢,、
...全文
53820 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
scmhw 2015-01-08
  • 打赏
  • 举报
回复

public Class<?> getType(){
		T t = (T) new Object();
		return t.getClass();
	}
不知道这样行不行因为T是类型,所有先实例化T然后获取类型
写代码的农民 2014-08-20
  • 打赏
  • 举报
回复 1

        Class<T> entityClass = null;
        Type t = getClass().getGenericSuperclass();
        if(t instanceof ParameterizedType){
            Type[] p = ((ParameterizedType)t).getActualTypeArguments();
            entityClass = (Class<T>)p[0];
        }
     
wangjinlong3768038 2013-02-27
  • 打赏
  • 举报
回复
这样在实例化Network<T>的时候,T是什么类型,你在graphTest(T t)通过 t.getClass()得到的不就是什么类型。 这样不是你传什么类型的类都可以。不符合你的要求?
wangjinlong3768038 2013-02-27
  • 打赏
  • 举报
回复
public class NetworkUtil<T> { public void graphTest(T t){ t.getClass(); } } 这样不行么
CSDN0327 2013-02-27
  • 打赏
  • 举报
回复
引用 7 楼 brilliantenginer 的回复:
引用 5 楼 caozhy 的回复: 这是一个非常奇怪的设计。 如果你试图获取泛型参数的具体类型,你还不如不用泛型,而直接把类型对象作为一个变量传进来。 泛型的魅力就在于对于它支持的类型“一视同仁”。这位仁兄说的对头,之所以只用泛型就是因为在某些地方我们不知道或者不想知道具体的参数类型信息而笼统的把他认为是某个类型T/E之类的,这样能够是方法变得灵活通用等等;比如之前有段时间我写的一……
学习了
losetowin 2013-02-27
  • 打赏
  • 举报
回复
引用 7 楼 brilliantenginer 的回复:
引用 5 楼 caozhy 的回复:这是一个非常奇怪的设计。 如果你试图获取泛型参数的具体类型,你还不如不用泛型,而直接把类型对象作为一个变量传进来。 泛型的魅力就在于对于它支持的类型“一视同仁”。这位仁兄说的对头,之所以只用泛型就是因为在某些地方我们不知道或者不想知道具体的参数类型信息而笼统的把他认为是某个类型T/E之类的,这样能够是方法变得灵活通用等等;比……
引用 5 楼 caozhy 的回复:
这是一个非常奇怪的设计。 如果你试图获取泛型参数的具体类型,你还不如不用泛型,而直接把类型对象作为一个变量传进来。 泛型的魅力就在于对于它支持的类型“一视同仁”。
是这样的,我希望这个类是个可变参数,不是对象,然后再方法里面有个方法是要用到这个类的class的,听一个同事说可以用泛型,代码大体如下: public void graphTest(这里需要传递一个类){ 类 a = (类)方法(类.class); } 想让这个类是个可变参数,怎么搞?
彡颵爺 2013-02-27
  • 打赏
  • 举报
回复
引用 5 楼 caozhy 的回复:
这是一个非常奇怪的设计。 如果你试图获取泛型参数的具体类型,你还不如不用泛型,而直接把类型对象作为一个变量传进来。 泛型的魅力就在于对于它支持的类型“一视同仁”。
这位仁兄说的对头,之所以只用泛型就是因为在某些地方我们不知道或者不想知道具体的参数类型信息而笼统的把他认为是某个类型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类不可能就一个所以需要使用泛型来处理,这就是泛型的优点
shine333 2013-02-27
  • 打赏
  • 举报
回复
不继承,貌似不能。

class B extends T<X> {
}
这种情况,即使在A里面写代码,也是能够获取X的具体信息的。 之所以这种方式可以,那是因为在编译的时候,<X>的信息,已经编译到了B.class里面,成为了B.class的一部分。而你new A<X>()或者new A<Y>()的时候,<X><Y>只存在于运行期,并没有被编译到A.class里面。所以无法反射出来
threenewbee 2013-02-27
  • 打赏
  • 举报
回复 2
这是一个非常奇怪的设计。 如果你试图获取泛型参数的具体类型,你还不如不用泛型,而直接把类型对象作为一个变量传进来。 泛型的魅力就在于对于它支持的类型“一视同仁”。
JPF1024 2013-02-26
  • 打赏
  • 举报
回复
引用 2 楼 kaidaotumij 的回复:
引用 1 楼 xulianghh 的回复:new一个T的对象,再getClass() 不能直接new一个T的,如果只有类被声明<T>,那么取不到T的class。 这个类的方法被传递了test(T t)这样参数得时候,通过getclass或取
示例:


package com.w1520.JavaDemo;

/**
 * 测试.
 * 
 * @author puruidong
 * @version 2013.2.25
 */
class ABC<T>{
	
	public ABC (T t){
		System.out.println(t.getClass());//获取类的信息.
	}
}

class D{
	//空类.
}


public class JavaDemo {
	public static void main(String[] args) {
		 new ABC(new D());
		
	}
}




输出:
class com.w1520.JavaDemo.D
losetowin 2013-02-26
  • 打赏
  • 举报
回复
引用 2 楼 kaidaotumij 的回复:
引用 1 楼 xulianghh 的回复:new一个T的对象,再getClass() 不能直接new一个T的,如果只有类被声明<T>,那么取不到T的class。 这个类的方法被传递了test(T t)这样参数得时候,通过getclass或取
能否详细讲一下,不是很明白~
biubiubiu蘼 2013-02-26
  • 打赏
  • 举报
回复
引用 1 楼 xulianghh 的回复:
new一个T的对象,再getClass()
不能直接new一个T的,如果只有类被声明<T>,那么取不到T的class。 这个类的方法被传递了test(T t)这样参数得时候,通过getclass或取
xulianghh 2013-02-26
  • 打赏
  • 举报
回复
new一个T的对象,再getClass()

62,635

社区成员

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

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