package com.aflfte.test;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;
import java.util.Map;
import com.aflfte.test.bean.User;
/**
* 通过反射获取泛型信息
*
* @author root
*
*/
public class Demo04 {
public void test01(Map<String,User> map,List<User> list) {
System.out.println("Demo04.test01()");
}
public Map<Integer, User> test02(){
System.out.println("Demo04.test02");
return null;
}
public static void main(String[] args) {
try {
//获取指定广泛参数泛型信息
Method m=Demo04.class.getMethod("test01", Map.class,List.class);
Type[] t=m.getGenericParameterTypes();//获取带泛型参数类型
System.out.println(t.length);
for(Type pt:t) {
System.out.println("#"+pt);
if(pt instanceof ParameterizedType) {//判断是不是包含泛型
Type[] gts=((ParameterizedType)pt).getActualTypeArguments();//获得泛型类型
for(Type gt:gts) {
System.out.println("泛型类型"+gt);
}
}
}
//获取指定方法返回值泛型信息
Method m2=Demo04.class.getMethod("test02", null);
Type rt=m2.getGenericReturnType();//获取带泛型的返回类型
if(rt instanceof ParameterizedType) {
Type[] rgt=((ParameterizedType)rt).getActualTypeArguments();
for(Type rgtt:rgt) {
System.out.println("返回值泛型信息:"+rgtt);
}
}
} catch (Exception e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
« 动态编译
|
通过反射API动态操作:构造器、方法、属性»
|