您的位置:首页 > 编程语言 > Java开发

java 反射操作泛型

2019-09-14 14:20 2711 查看
public class emm {

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) {

try {
Method m=emm.class.getMethod("test01", Map.class,List.class); //反射方法

Type[] t=m.getGenericParameterTypes(); //获得带泛型的参数类型,返回的是type类型的数组

for(Type paramType:t)
{
System.out.println("#"+paramType);
if(paramType instanceof ParameterizedType) {  //判断是不是一个规范化参数类型
//如果是强制转为规范化带泛型的参数类型,因为可能有多个泛型类型,所以用数组
Type[] genericTypes=((ParameterizedType) paramType).getActualTypeArguments();//获得真正的泛型的类型,String、User
for(Type genericType:genericTypes)
{
System.out.println("泛型类型"+genericType);
}
}
}

Method m2=emm.class.getMethod("test02", null);

Type returnType=m2.getGenericReturnType(); //获得带泛型的返回类型

if(returnType instanceof ParameterizedType) //判断是不是规范化的带泛型的返回类型
{
//强制转换成规范化的带泛型的参数类型
Type[] genericTypes=((ParameterizedType)returnType).getActualTypeArguments();
for(Type genericType:genericTypes)
{
System.out.println("返回值泛型类型"+genericType);
}
}

}catch(Exception e)
{
e.printStackTrace();
}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐