目录
- 获取泛型信息
- 1. Java 实例
获取泛型信息
- ParameterizedType 接口可以用来获取泛型参数信息,如泛型类、泛型方法、泛型接口的;
- 提供的 getActualTypeArguments() 方法是返回表示此类型实际类型参数的 Type 对象的数组;
- java.lang.reflect,详见:Interface ParameterizedType;
1. Java 实例
- 获取指定类的 Class 类对象 cf;
- 指定成员变量 gc 的泛型参数类型 t;
- 若 t 属于 ParameterizedType 接口类型,获取实际类型参数的对象数组 pt;
- 利用反射获取泛型方法,返回值泛型参数信息;
import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;
public class test {
//定义类的成员变量,类型是泛型类GenericClass
private GenericClass<String, Integer, Double> gc;
public static void main(String args[]) {
try {
//获取指定类的Class类对象cf
Class cf = Class.forName("test");
//利用反射获取泛型类的参数信息
Field field = cf.getDeclaredField("gc");
//指定成员变量gc的泛型参数类型t
Type t = field.getGenericType();
//若t属于ParameterizedType接口类型
if (t instanceof ParameterizedType) {
//获取实际类型参数的对象数组pt
System.out.println("---泛型类信息---");
Type[] pt = ((ParameterizedType) t).getActualTypeArguments();
for (Type tt : pt) {
System.out.println(tt);
}
}
//利用反射获取泛型方法:返回值泛型参数信息
Class c = Class.forName("GenericClass");
System.out.println("---泛型方法信息---");
Type type = c.getMethod("getMyParams").getGenericReturnType();
System.out.println(type.toString());
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
}
}
class GenericClass<String, Integer, Double> {
private List<String> myParams;
public List<String> getMyParams() {
return myParams;
}
}
/*
输出
---泛型类信息---
class java.lang.String
class java.lang.Integer
class java.lang.Double
---泛型方法信息---
java.util.List<String>
*/