黑马程序员技术交流社区
标题:
可以通过反射获取集合的泛型吗?
[打印本页]
作者:
想要那片海
时间:
2015-5-28 21:19
标题:
可以通过反射获取集合的泛型吗?
比如定义了一个 ArrayList<Integer> list=new ArrayList<Integer>();
怎么通过反射获取list 这个集合的泛型类型?
作者:
程浩9207
时间:
2015-5-29 18:54
本帖最后由 程浩9207 于 2015-5-29 18:56 编辑
package com.itcast.cn_1;
import java.lang.reflect.Method;
import java.util.ArrayList;
public class ArrayListDemo {
public static void main (String[]args) throws Exception, Exception{
//创建对象
ArrayList<Integer>list=new ArrayList<Integer>();
//获取字节码对象
Class c=list.getClass();
//获取构造方法
Method m=c.getMethod("add",Object.class);
//添加字符串
m.invoke(list,"hello,world");
System.out.println(list);
}
}
作者:
王建伟
时间:
2015-5-29 18:57
你可以先获得这个集合所存的数据,再通过数据,获取数据的字节码文件接着获取类型。
作者:
nbcallum
时间:
2015-5-29 19:15
我给你写了一个Map的,这个会了,你那个也就会了
import java.util.*;
import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
public class Test1 {
public static void main(String[] args) throws NoSuchFieldException, SecurityException {
Class<MyTest> c = MyTest.class;
Field f = c.getDeclaredField("myMap");
/*
* 下面这两行对普通的变量好使,对集合就不行了
Class<?> cl = f.getType();
System.out.println(cl);
*/
//获得泛型类型
Type myType = f.getGenericType();
// ParameterizedType是被参数化的类型,不懂你可以看看API文档,里面就两个方法
if(myType instanceof ParameterizedType){
ParameterizedType myPType = (ParameterizedType)myType;
//返回原始类型
Type rType = myPType.getRawType();
System.out.println("原始类型是:" + rType);
//返回泛型参数的类型
Type[] tArray = myPType.getActualTypeArguments();
for(int i = 0; i < tArray.length;i++){
System.out.println("第" + i + "个泛型类型是:" + tArray[i]);
}
}
}
}
class MyTest{
private Map<String,Integer> myMap;
}
打印的是:
原始类型是:interface java.util.Map
第0个泛型类型是:class java.lang.String
第1个泛型类型是:class java.lang.Integer
作者:
途中ms前进
时间:
2015-5-30 10:32
学习学习
作者:
星辉祝愿
时间:
2015-5-30 13:24
看帖来学习 了
作者:
guojiadui
时间:
2015-5-30 15:43
用反射OK。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2