ParameterizedType:表示一种参数化的类型,比如Collection<String> GenericArrayType:表示一种元素类型是参数化类型或者类型变量的数组类型。 TypeVariable:是各种类型变量的公共接口。 WildcardType:代表一种通配符类型表达式,比如?,?extends,Number,?super Integer【Wildcard是一个单词:就是通配符】 |
import java.lang.reflect.Method; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.List; import java.util.Map;
publicclass Dome1 { publicvoid test01(Map<String, User> map, List<User> list) { System.out.println("Dome1.test01"); }
public Map<Integer, User> test02() { returnnull; }
publicstaticvoid main(String[] args) throws NoSuchMethodException, SecurityException { // 获取指定方法参数泛型信息。 Method m = Dome1.class.getMethod("test01", Map.class, List.class); Type[] t = m.getGenericParameterTypes(); for (Type type : t) { System.out.println("#" + type); if (type instanceof ParameterizedType) { Type[] genericTypes = ((ParameterizedType) type) .getActualTypeArguments(); for (Type type2 : genericTypes) { System.out.println("泛型类型" + type2); } } } System.out.println("============================="); // 获取指定方法返回值泛型信息。 Method m2 = Dome1.class.getMethod("test02", null); Type returnType = m2.getGenericReturnType(); if (returnType instanceof ParameterizedType) { Type[] genericType = ((ParameterizedType) returnType) .getActualTypeArguments(); for (Type type : genericType) { System.out.println("返回值的泛型类型:" + type); } } } } |
publicclass User { private Integer uid; private String name;
public Integer getUid() { returnuid; }
publicvoid setUid(Integer uid) { this.uid = uid; }
public String getName() { returnname; } publicvoid setName(String name) { this.name = name; } } |
#java.util.Map<java.lang.String, User> 泛型类型class java.lang.String 泛型类型class User #java.util.List<User> 泛型类型class User ============================= 返回值的泛型类型:class java.lang.Integer 返回值的泛型类型:class User |