使用反射获取泛型
2020-02-06 本文已影响0人
风中小酌
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 TestReflectFanxing {
//方法中有三个参数,第一个参数有两个泛型,第二个参数有一个泛型,第三个参数为普通参数
public void test01(Map<String, User> para1, List<User> alist, String str){
System.out.println("Test Generic.Test01()");
}
//方法的返回类型为两个泛型
public Map<User, Integer> test02(){
System.out.println("Test Generic.Test02()");
return null;
}
//方法的返回类型为普通字符串
public String test03(){
System.out.println("Test Generic.Test03()");
return null;
}
public static void main(String[] args) throws NoSuchMethodException, SecurityException {
//获取类的Class对象
Class cls = TestReflectFanxing.class;
//获取方法test01的泛型参数信息
Method m1 = cls.getMethod("test01", Map.class, List.class, String.class);
Type[] m1type = m1.getGenericParameterTypes();
for(Type t : m1type){
if(t instanceof ParameterizedType){
Type[] tt = ((ParameterizedType) t).getActualTypeArguments();
for(Type subt : tt){
System.out.println("泛型类型:" + subt);
}
System.out.println("-----------------");
}
}
//获取方法test02返回参数中的泛型类型
Method m2 = cls.getMethod("test02");
Type t2 = m2.getGenericReturnType();
if(t2 instanceof ParameterizedType){
Type[] sub2 = ((ParameterizedType) t2).getActualTypeArguments();
for(Type tt2 : sub2){
System.out.println("返回参数类型为: " + tt2);
}
}
System.out.println("=========================");
Method m3 = cls.getMethod("test03");
Type t3 = m3.getGenericReturnType();
System.out.println("test03的返回类型:" + t3);
System.out.println(t3 instanceof ParameterizedType);
}
}