获取泛型信息
package com.caster.reflect;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;
import java.util.Map;
//通过反射获取泛型
public class demo10 {
public void test01(Map<String,User> map, List<User> list){
System.out.println("test01");
}
public Map<String,User> test02(){
System.out.println("test02");
return null;
}
public static void main(String[] args) throws NoSuchMethodException {
//通过反射获得方法
Method test01 = demo10.class.getMethod("test01", Map.class, List.class);
//获得泛型的参数类型
Type[] genericParameterTypes = test01.getGenericParameterTypes();
//打印泛型的数组信息
for (Type genericParameterType : genericParameterTypes) {
System.out.println(genericParameterType);
//如果泛型参数是参数化类型
if (genericParameterType instanceof ParameterizedType){
//强转参数化类型
Type[] actualTypeArguments = ((ParameterizedType) genericParameterType).getActualTypeArguments();//获得真实参数化信息
for (Type actualTypeArgument : actualTypeArguments) {
System.out.println(actualTypeArguments);
}
}
}
Method test02 = demo10.class.getMethod("test02",null);
Type[] genericParameterTypes1 = test02.getGenericParameterTypes();
for (Type type : genericParameterTypes1) {
System.out.println("sd"+type);
if (type instanceof ParameterizedType){
Type[] actualTypeArguments = ((ParameterizedType) type).getActualTypeArguments();
for (Type actualTypeArgument : actualTypeArguments) {
System.out.println(actualTypeArgument);
}
}
}
}
}