反射泛型方法说明:
1. isPrimitive 判断指定的Class对象是否表示一个基本类型
2. isAssignableFrom 表示class是否是参数class的父类
3. ParameterizedType 表示参数化类型如List
4. getGenericSuperclass 返回本类的父类包含泛型信息
5. getSuperclass 返回本类的父类
6. getGenericReturnType 返回方法的返回值类型包含泛型信息
7. getMethodParametricGeneric 返回成员方法参数的泛型类型信息
8. getMemberVariablesGeneric 返回成员变量的泛型类型信息
9. WildcardType接口的getUpperBounds()和getLowerBounds()来获得类型的上下界
反射获取类的泛型
//返回本类的父类包含泛型信息
Type superclass = ArrayList.class.getGenericSuperclass();
for (Type t : ((ParameterizedType) superclass).getActualTypeArguments()) {
System.out.println(t);
}
获取方法参数中的泛型
//一个方法有Map类型和List类型的参数,并指定泛型
public void study(Map<String, Integer> map, List<String> list){
}
public static void main(String[] args) {
try {
//通过反射获得该方法
Method study = Demo.class.getMethod("study", Map.class, List.class);
//获得该方法的所有参数类型
Type[] genericParameterTypes = study.getGenericParameterTypes();
for (Type type : genericParameterTypes){
System.out.println("##"+ type);
//如果参数为参数化的类型进行强转
if (type instanceof ParameterizedType){
ParameterizedType parameterizedType = (ParameterizedType)type;
//获得参数化类型中实际参数(Map<String, Integer> 中<>内定义的参数)
Type[] actualTypeArguments = parameterizedType.getActualTypeArguments();
//遍历输出
for (Type tt : actualTypeArguments){
System.out.println(tt);
}
}
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}