怎么样获得泛型T的Class对象?

public class GenClass<T> {

private Class<T> entityClass;


}


public class Test {

public static void main(String[] args) {
GenClass<User> gen = new GenClass<User>();
}

}

这样用的话,GenClass中如何获得T类型的Class对象

 

 

 

java中没法得到泛型参数化类型,因为在编译期没法确定泛型参数化类型,也就找不到对应的类字节码文件,自然就不行了


Type genType = clazz.getGenericSuperclass();
Type [] params = ((ParameterizedType) genType).getActualTypeArguments();
return (Class) params[0];


泛型反射的关键是获取ParameterizedType,再调用它的getActualTypeArguments()方法获得实际绑定的类 型。但注意public class BookManager<Book>是不能被反射的,因为擦拭法的缘故。只有在Superclass 或者成员变量(Field.getGenericType())等有函数返回ParameterizedType的时候才能成功反射

 

 

Java中的范型是用擦除实现的,简单点儿就是编译期能看到类型信息,但运行期T其实都变成Object了,也就是说运行期通过反射不会获得类型信息,就算获得也只是Object类型.
但这也不是完全不可能的,对于带有上边界限定符的如<T extends Comparable<T>>
你可以获得到Comparable类型.这个信息被保存到了运行时.通用化之后<T>获得的与<T extends Object>相同,上边界换成了Object.

posted on 2014-04-18 22:23  jiezzy  阅读(629)  评论(0编辑  收藏  举报