java使用ParameterizedType实现泛型

本教程操作环境:windows7系统、java10版,DELL G3电脑。

1、过程

(1)测试属性类型

(2)打印type与generic type的区别

(3)测试参数类型

(4)测试返回值类型

2、实例

publicclassClient{

privateMap<String,Object>objectMap;

publicvoidtest(Map<String,User>map,Stringstring){
}

publicMap<User,Bean>test(){
returnnull;
}

/**
*测试属性类型
*
*@throwsNoSuchFieldException
*/
@Test
publicvoidtestFieldType()throwsNoSuchFieldException{
Fieldfield=Client.class.getDeclaredField("objectMap");
TypegType=field.getGenericType();
//打印type与generictype的区别
System.out.println(field.getType());
System.out.println(gType);
System.out.println("**************");
if(gTypeinstanceofParameterizedType){
ParameterizedTypepType=(ParameterizedType)gType;
Type[]types=pType.getActualTypeArguments();
for(Typetype:types){
System.out.println(type.toString());
}
}
}

/**
*测试参数类型
*
*@throwsNoSuchMethodException
*/
@Test
publicvoidtestParamType()throwsNoSuchMethodException{
MethodtestMethod=Client.class.getMethod("test",Map.class,String.class);
Type[]parameterTypes=testMethod.getGenericParameterTypes();
for(Typetype:parameterTypes){
System.out.println("type->"+type);
if(typeinstanceofParameterizedType){
Type[]actualTypes=((ParameterizedType)type).getActualTypeArguments();
for(TypeactualType:actualTypes){
System.out.println("\tactualtype->"+actualType);
}
}
}
}

/**
*测试返回值类型
*
*@throwsNoSuchMethodException
*/
@Test
publicvoidtestReturnType()throwsNoSuchMethodException{
MethodtestMethod=Client.class.getMethod("test");
TypereturnType=testMethod.getGenericReturnType();
System.out.println("returntype->"+returnType);

if(returnTypeinstanceofParameterizedType){
Type[]actualTypes=((ParameterizedType)returnType).getActualTypeArguments();
for(TypeactualType:actualTypes){
System.out.println("\tactualtype->"+actualType);
}
}
}
}
原文来自:https://www.py.cn
© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容