package hike.reflection;
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 Test11 {
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 method = Test11.class.getMethod("test01", Map.class, List.class);
// 获取 方法的 泛型的参数类型
Type[] genericParameterTypes = method.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(actualTypeArgument);
}
}
}
System.out.println("================================================");
method = Test11.class.getMethod("test02", null);
// 获取泛型的返回值参数类型
Type genericReturnType = method.getGenericReturnType();
// 如果泛型的数据类型 属于 参数化类型(通俗的理解,就是这层参数里面是不是还包着其他类型)
if (genericReturnType instanceof ParameterizedType) {
// 强制转换数据类型,获取该类型 的 真实类型
Type[] actualTypeArguments = ((ParameterizedType) genericReturnType).getActualTypeArguments();
for (Type actualTypeArgument : actualTypeArguments) {
System.out.println(actualTypeArgument);
}
}
}
}