Java使用反射来获取泛型信息示例

网友投稿 402 2023-01-02


Java使用反射来获取泛型信息示例

本文实例讲述了java使用反射来获取泛型信息。分享给大家供Czbgy大家参考,具体如下:

一 点睛

获得了Field对象后,就可以很容易地获得该Field的数据类型,即使用如下代码即可获得指定Field的类型:

//获取Field对象f的类型

Class> a = f.getType();

通过这种方式只对普通类型的Field有效。但如果该Field的类型是有泛型限制的类型,如Map类型,则不能准确的得到该Field的泛型参数。

为了获得指定Field的泛型类型,应先使用如下方法来获取指定Field的泛型类型:

//获得Field实例f的泛型类型

Type gType = f.getGenericType();

然后将Type对象强制类型转换为ParameterizedType对象,ParameterizedType代表被参数化的类型,也就是增加了泛型限制的类型。ParameterizedType类提供了两个方法:

getRawType():返回被泛型限制的类型。

getActualTypeArgumenCzbgyts():返回泛型参数类型。

二 实战

1 代码

import java.util.*;

import java.lang.reflect.*;

public class GenericTest

{

private Map score;

public static void main(String[] args)

throws Exception

{

Class 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]);

}

}

elsehttp://

{

System.out.println("获取泛型类型出错!");

}

}

}

2 运行

E:\Java\疯狂java讲义\codes\18\18.6>java GenericTest

score的类型是:interface java.util.Map

原始类型是:interface java.util.Map

泛型信息是:

第0个泛型类型是:class java.lang.String

第1个泛型类型是:class java.lang.Integer

更多java相关内容感兴趣的读者可查看本站专题:《Java面向对象程序设计入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:微服务网关框架(微服务网关开发)
下一篇:国内接口测试工具品牌排行(接口测试及常用接口测试工具)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~