一些泛型相关的类型: ParameterizedType 参数化类型 即带参数(泛型参数)的数据类型(带"<>"的数据类型) GenericArrayType 泛型数组(Xxx<T>[]或T[]) TypeVariable 泛型类型(T、K、V等) WildcardType 通配符类型(? extends Xxx等)
参数为泛型的方法 与 返回值为泛型的方法
public void test01(Map<String, Player> map, List<Player> list){
System.out.println("test01");
}
public Map<String, Player> test02(){
System.out.println("test02");
return null;
}
获取泛型的类型
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;
import java.util.Map;
//通过反射获取泛型的类型
// ParameterizedType 参数化类型 即带参数(泛型参数)的数据类型(带"<>"的数据类型)
// GenericArrayType 泛型数组(Xxx<T>[]或T[])
// TypeVariable 泛型类型(T、K、V等)
// WildcardType 通配符类型(? extends Xxx等)
public class Test_07 {
public static void main(String[] args) throws NoSuchMethodException {
Class<Test_07> aclass = Test_07.class;
Method method01 = aclass.getMethod("test01", Map.class, List.class);
Method method02 = aclass.getMethod("test02");
//getGenericParameterTypes() 获取参数的泛型的类型
Type[] genericParameterTypes = method01.getGenericParameterTypes();
//输出泛型的类型
for (Type genericParameterType : genericParameterTypes){
System.out.println(genericParameterType);
//ParameterizedType 参数化类型 即带参数(泛型参数)的数据类型(带"<>"的数据类型)
if (genericParameterType instanceof ParameterizedType){
Type[] actualTypeArguments = ((ParameterizedType) genericParameterType).getActualTypeArguments();
for (Type actualTypeArgument : actualTypeArguments) {
System.out.println("参数的泛型类型: " + actualTypeArgument);
}
}
}
System.out.println("====================");
//getGenericReturnType() 获取返回值的泛型的类型
Type genericReturnType = method02.getGenericReturnType();
//输出泛型的类型
//ParameterizedType 参数化类型 即带参数(泛型参数)的数据类型(带"<>"的数据类型)
if (genericReturnType instanceof ParameterizedType){
Type[] actualTypeArguments = ((ParameterizedType) genericReturnType).getActualTypeArguments();
for (Type actualTypeArgument : actualTypeArguments) {
System.out.println("返回值的泛型类型: " + actualTypeArgument);
}
}
}
}
运行结果