取得泛型的的类型,是通过反射技术反射类、构造方法、成员方法、成员变量,
从而取得类的泛型参数、构造方法的泛型参数、成员方法的泛型参数以及泛型返回值、成员变量的泛型参数类型。如果上面的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("不是泛型");
}
}}如果有你描述的那么牛的方法,我得膜拜学习
从而取得类的泛型参数、构造方法的泛型参数、成员方法的泛型参数以及泛型返回值、成员变量的泛型参数类型。如果上面的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("不是泛型");
}
}}如果有你描述的那么牛的方法,我得膜拜学习
传给一个方法 read(List list)
那么很可惜,由于去泛型化,你在里面只能得到Object, 你难道要一个一个的 instanceof 吗?
list.add("123");
System.out.println(list.get(0).getClass());
Class A(){
List<B> bs;}
根据类的定义自动生成查询参数,所以我需要读取成员的泛型。
110long的方法是正解,十分感谢。似乎只有类成员才可以读取泛型, 我试了半天也没有其他办法能读取非类成员变量,对底层还不是很了解。
谢谢各位的回复支持