取得泛型的的类型,是通过反射技术反射类、构造方法、成员方法、成员变量,
从而取得类的泛型参数、构造方法的泛型参数、成员方法的泛型参数以及泛型返回值、成员变量的泛型参数类型。如果上面的list是一个类的成员变量可以这样的方式取得:
public class Test1 {
private List<String> list = new ArrayList<String>(); @SuppressWarnings("unchecked")
public static void main(String[] args) throws Exception {

Class clazz = readGeneric("list",Test1.class);
System.out.println(clazz);
} private static Class readGeneric(String name,Class clazz) throws Exception {
Field list = Test1.class.getDeclaredField(name);
list.setAccessible(true);
if (list.getGenericType() instanceof ParameterizedType) {
ParameterizedType pt = (ParameterizedType)   
                                                  list.getGenericType();
return (Class) pt.getActualTypeArguments()[0];
}else{
throw new RuntimeException("不是泛型");
}
}}如果有你描述的那么牛的方法,我得膜拜学习

解决方案 »

  1.   

    泛型,就是让你不要关注某个具体的类型,而是关注其基类或者超类就行了另外,那个List<String>是你自己手工写的,你怎么可能不知道里面是什么类型呢?如果你非得吧 List<String> List<Integer>
    传给一个方法 read(List list)
    那么很可惜,由于去泛型化,你在里面只能得到Object, 你难道要一个一个的 instanceof 吗?
      

  2.   

    List<String> list = new ArrayList<String>();
    list.add("123");
    System.out.println(list.get(0).getClass());
      

  3.   

    恩,我现在是利用hibernate做一个东西,如果类的成员变量中含有List,Set这样的类型,我就需要读取其泛型类型,用户可以根据泛型的成员变量还定制查询。
    Class A(){
      List<B> bs;}
    根据类的定义自动生成查询参数,所以我需要读取成员的泛型。
    110long的方法是正解,十分感谢。似乎只有类成员才可以读取泛型, 我试了半天也没有其他办法能读取非类成员变量,对底层还不是很了解。
    谢谢各位的回复支持