没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论

















Java使用反射来获取泛型信息示例使用反射来获取泛型信息示例
主要介绍了Java使用反射来获取泛型信息,结合实例形式分析了java基于反射操作泛型信息的相关实现技巧与注
意事项,需要的朋友可以参考下
本文实例讲述了Java使用反射来获取泛型信息。分享给大家供大家参考,具体如下:
一一 点睛点睛
获得了Field对象后,就可以很容易地获得该Field的数据类型,即使用如下代码即可获得指定Field的类型:
//获取Field对象f的类型
Class<?> a = f.getType();
通过这种方式只对普通类型的Field有效。但如果该Field的类型是有泛型限制的类型,如Map<String , Integer>类型,则不能
准确的得到该Field的泛型参数。
为了获得指定Field的泛型类型,应先使用如下方法来获取指定Field的泛型类型:
//获得Field实例f的泛型类型
Type gType = f.getGenericType();
然后将Type对象强制类型转换为ParameterizedType对象,ParameterizedType代表被参数化的类型,也就是增加了泛型限制
的类型。ParameterizedType类提供了两个方法:
getRawType():返回被泛型限制的类型。
getActualTypeArguments():返回泛型参数类型。
二二 实战实战
1 代码
import java.util.*;
import java.lang.reflect.*;
public class GenericTest
{
private Map<String , Integer> score;
public static void main(String[] args)
throws Exception
{
Class<GenericTest> clazz = GenericTest.class;
Field f = clazz.getDeclaredField("score");
// 直接使用getType()取出的类型只对普通类型的成员变量有效
Class<?> a = f.getType();
// 下面将看到仅输出java.util.Map
System.out.println("score的类型是:" + a);
// 获得成员变量f的泛型类型
Type gType = f.getGenericType();
// 如果gType类型是ParameterizedType对象
if(gType instanceof ParameterizedType)
{
// 强制类型转换
ParameterizedType pType = (ParameterizedType)gType;
// 获取原始类型
Type rType = pType.getRawType();
System.out.println("原始类型是:" + rType);
// 取得泛型类型的泛型参数
Type[] tArgs = pType.getActualTypeArguments();
System.out.println("泛型信息是:");
for (int i = 0; i < tArgs.length; i++)
{
System.out.println("第" + i + "个泛型类型是:" + tArgs[i]);
}
}
else
{
System.out.println("获取泛型类型出错!");
}
}
}
2 运行
资源评论


weixin_38714641
- 粉丝: 1
- 资源: 949
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


安全验证
文档复制为VIP权益,开通VIP直接复制
