如何反射获取List 中泛型的类型。

时间:2022-01-04 19:25:32
比如:
 List<String> list = new ArrayList<String>();

如何根据反射 通过list 获取该List中泛型的类型。

11 个解决方案

#1





参考。

#3


引用 2 楼 JavaAlpha 的回复:
http://bbs.csdn.net/topics/210017667


这个问题和我的问题还是有区别的 。 
这个问题是获取集合里面元素的类型。 


我现在的问题是这样的:

public void test01(List list){
  // 打印List中泛型的类型
}

比如 
List<String> list01 = new ArrayList<String>();
test01(list01);
应该打印String 类型 


List<Integer> list02 = new ArrayList<Integer>();
test01(list02);
应该打印Integer类型 

#4


引用 3 楼 is_zhoufeng 的回复:
引用 2 楼 JavaAlpha 的回复:
http://bbs.csdn.net/topics/210017667

这个问题和我的问题还是有区别的 。 
这个问题是获取集合里面元素的类型。 


我现在的问题是这样的:

public void test01(List list){
  // 打印List中泛型的类型
}

比如 
List<String> list……


你可以自己判断下类型。

#5


引用 4 楼 JavaAlpha 的回复:
引用 3 楼 is_zhoufeng 的回复:引用 2 楼 JavaAlpha 的回复:
http://bbs.csdn.net/topics/210017667

这个问题和我的问题还是有区别的 。 
这个问题是获取集合里面元素的类型。 


我现在的问题是这样的:

public void test01(List list){
  // 打印Lis……


我现在没办法获取它是什么类型的。

#6


引用 5 楼 is_zhoufeng 的回复:
引用 4 楼 JavaAlpha 的回复:
引用 3 楼 is_zhoufeng 的回复:引用 2 楼 JavaAlpha 的回复:
http://bbs.csdn.net/topics/210017667

这个问题和我的问题还是有区别的 。 
这个问题是获取集合里面元素的类型。 


我现在的问题是这样的:

public void test01(List list){
……


不用发射,这样判断就可以了。


List list = new ArrayList();
list.add("test");
list.add(1);

for (Object object :list) {
if (object instanceof String) {
System.out.println("String");
}else if (object instanceof Integer) {
System.out.println("Integer");
}
}

#7




public class GenericTest   
{   
    public List<String> list = new LinkedList<String>();   
  
    public static void main(String[] args) throws SecurityException, NoSuchFieldException   
    {   
        ParameterizedType pt = (ParameterizedType) GenericTest.class.getField(   
                "list").getGenericType();   
        System.out.println(pt.getActualTypeArguments().length);   
        System.out.println(pt.getActualTypeArguments()[0]);   
    }   
}  

#8


这个list只能是成员变量或方法变量中才能获得他的泛型。

#9


引用 8 楼 suciver 的回复:
这个list只能是成员变量或方法变量中才能获得他的泛型。


是的!

#10


  这个好办,真实运气了楼主你,最近我就研究这个东西
   首先导入这个qdox-1.12.jar(你百度一下就搞定了)
   然后这样:  field.getType().getGenericValue()  就搞定了(看到结果你就知道怎么办了,不再解释)

#11


试试这个:

List<T> list = new ArrayList<T>(0); 
Method method = list.class.getMethod("get",null); 
Class returnTypeClass = method.getReturnType(); 
returnTypeClass就是返回类型了

#1





参考。

#2


#3


引用 2 楼 JavaAlpha 的回复:
http://bbs.csdn.net/topics/210017667


这个问题和我的问题还是有区别的 。 
这个问题是获取集合里面元素的类型。 


我现在的问题是这样的:

public void test01(List list){
  // 打印List中泛型的类型
}

比如 
List<String> list01 = new ArrayList<String>();
test01(list01);
应该打印String 类型 


List<Integer> list02 = new ArrayList<Integer>();
test01(list02);
应该打印Integer类型 

#4


引用 3 楼 is_zhoufeng 的回复:
引用 2 楼 JavaAlpha 的回复:
http://bbs.csdn.net/topics/210017667

这个问题和我的问题还是有区别的 。 
这个问题是获取集合里面元素的类型。 


我现在的问题是这样的:

public void test01(List list){
  // 打印List中泛型的类型
}

比如 
List<String> list……


你可以自己判断下类型。

#5


引用 4 楼 JavaAlpha 的回复:
引用 3 楼 is_zhoufeng 的回复:引用 2 楼 JavaAlpha 的回复:
http://bbs.csdn.net/topics/210017667

这个问题和我的问题还是有区别的 。 
这个问题是获取集合里面元素的类型。 


我现在的问题是这样的:

public void test01(List list){
  // 打印Lis……


我现在没办法获取它是什么类型的。

#6


引用 5 楼 is_zhoufeng 的回复:
引用 4 楼 JavaAlpha 的回复:
引用 3 楼 is_zhoufeng 的回复:引用 2 楼 JavaAlpha 的回复:
http://bbs.csdn.net/topics/210017667

这个问题和我的问题还是有区别的 。 
这个问题是获取集合里面元素的类型。 


我现在的问题是这样的:

public void test01(List list){
……


不用发射,这样判断就可以了。


List list = new ArrayList();
list.add("test");
list.add(1);

for (Object object :list) {
if (object instanceof String) {
System.out.println("String");
}else if (object instanceof Integer) {
System.out.println("Integer");
}
}

#7




public class GenericTest   
{   
    public List<String> list = new LinkedList<String>();   
  
    public static void main(String[] args) throws SecurityException, NoSuchFieldException   
    {   
        ParameterizedType pt = (ParameterizedType) GenericTest.class.getField(   
                "list").getGenericType();   
        System.out.println(pt.getActualTypeArguments().length);   
        System.out.println(pt.getActualTypeArguments()[0]);   
    }   
}  

#8


这个list只能是成员变量或方法变量中才能获得他的泛型。

#9


引用 8 楼 suciver 的回复:
这个list只能是成员变量或方法变量中才能获得他的泛型。


是的!

#10


  这个好办,真实运气了楼主你,最近我就研究这个东西
   首先导入这个qdox-1.12.jar(你百度一下就搞定了)
   然后这样:  field.getType().getGenericValue()  就搞定了(看到结果你就知道怎么办了,不再解释)

#11


试试这个:

List<T> list = new ArrayList<T>(0); 
Method method = list.class.getMethod("get",null); 
Class returnTypeClass = method.getReturnType(); 
returnTypeClass就是返回类型了