获取泛型信息
- 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 {
private GenericClass<String, Integer, Double> gc;
public static void main(String args[]) {
try {
Class cf = Class.forName("test");
Field field = cf.getDeclaredField("gc");
Type t = field.getGenericType();
if (t instanceof ParameterizedType) {
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;
}
}