Java: ParameterizedType用法与简介
先说结论:
ParameterizedType 意为参数化类型
一、何为参数化类型? 先看个例子
1、先定义一个待反射的对象,然后用 field.getGenericType() instanceof ParameterizedType 来判断字段是否是泛型类型
public class ReflectTestBean {List<String> list1;List list2;Map<String, Integer> map1;Map map2;
}
@Test
public void test() {Class<ReflectTestBean> cls = ReflectTestBean.class;Field[] fields = cls.getDeclaredFields();for (Field field : fields) {System.out.println(field.getName() + " 是否是泛型:" + (field.getGenericType() instanceof ParameterizedType));}
}
// list1 是否是泛型:true
// list2 是否是泛型:false
// map1 是否是泛型:true
// map2 是否是泛型:false
二、一些常用方法 还是用上述的ReflectTestBean
- Type Field.getGenericType();
获取类字段的完整数据类型,可以注意到,带了泛型的属性,将完整的属性类型及泛型类型都标识出来了,而没有加泛型的属性则显示的是interface,意为接口类型
@Test
public void test() {Class<ReflectTestBean> cls = ReflectTestBean.class;Field[] fields = cls.getDeclaredFields();for (Field field : fields) {System.out.println(field.getName() + " 的完整数据类型为:" + field.getGenericType());}
}
// list1 的完整数据类型为:java.util.List<java.lang.String>
// list2 的完整数据类型为:interface java.util.List
// map1 的完整数据类型为:java.util.Map<java.lang.String, java.lang.Integer>
// map2 的完整数据类型为:interface java.util.Map
- Type[] ParameterizedType.getActualTypeArguments()
获取类字段中 <泛型> 的类型 下列例子中,通过获取ParameterizedType.getActualTypeArguments(),可以获取该字段的所有泛型类型,以后在反射工具类中,可以通过这个方法读取到所有的字段的参数类型
@Test
public void test() {Class<ReflectTestBean> cls = ReflectTestBean.class;Field[] fields = cls.getDeclaredFields();for (Field field : fields) {// 先判断字段是否带有泛型if (field.getGenericType() instanceof ParameterizedType) {ParameterizedType type = (ParameterizedType) field.getGenericType();System.out.print(field.getName() + " 的属性为:" + type.getTypeName());Type[] types = type.getActualTypeArguments();for (Type t : types) {System.out.println(", 真实的泛型的类型为:" + t.getTypeName());}}}
}
// list1 的属性为:java.util.List<java.lang.String>, 真实的泛型的类型为:java.lang.String
// map1 的属性为:java.util.Map<java.lang.String, java.lang.Integer>, 真实的泛型的类型为:java.lang.String, java.lang.Integer
- Type ParameterizedType.getRawType()
获取原始字段类型 ,可以看到这里跟 Field.getGenericType() 的区别是,前者将完整的字段类型及泛型类型都显示出来,而getRawType() 只显示了原始类型,而不显示泛型类型
@Test
public void test() {Class<ReflectTestBean> cls = ReflectTestBean.class;Field[] fields = cls.getDeclaredFields();for (Field field : fields) {// 先判断字段是否带有泛型if (field.getGenericType() instanceof ParameterizedType) {ParameterizedType type = (ParameterizedType) field.getGenericType();System.out.println(field.getName() + " 的字段类型为:" + type.getRawType().getTypeName());}}
}
// list1 的变量类型为:java.util.List
// map1 的变量类型为:java.util.Map
Java: ParameterizedType用法与简介相关推荐
- java sftp.mkdir 报错,java mkdir用法
java mkdir用法 [2021-02-10 09:22:55] 简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace("/( ...
- java resume过时方法_学点开发|关于Java多线程用法解析
在进行学习之前,我们先来了解下,什么是Java多线程: 多线程是实现并发机制的一种有效手段.进程和线程一样,都是实现并发的一个基本单位.为了让大家更清晰读懂关于Java多线程用法,由以下几点入手学,帮 ...
- Java开源项目EZMorph简介
http://hi.baidu.com/glfbin/blog/item/1302747e8722852e0cd7daaf.html Java开源项目EZMorph简介 2011-04-30 9:40 ...
- java.util.Stack类简介
转载自 java.util.Stack类简介 Stack是一个后进先出(last in first out,LIFO)的堆栈,在Vector类的基础上扩展5个方法而来 Deque(双端队列)比起St ...
- java正则表达式用法示例_Java正则表达式教程及示例
java正则表达式用法示例 当我开始使用Java时,正则表达式对我来说是一场噩梦. 本教程旨在帮助您掌握Java正则表达式,并让我定期返回以刷新我的正则表达式学习. 什么是正则表达式? 正则表达式定义 ...
- java list用法_Java List 用法详解及实例分析
Java List 用法详解及实例分析 Java中可变数组的原理就是不断的创建新的数组,将原数组加到新的数组中,下文对Java List用法做了详解. List:元素是有序的(怎么存的就怎么取出来,顺 ...
- java反射用法示例_Java包| 类型,用法,示例
java反射用法示例 配套 (Packages) Packages in Java is simply a mechanism to encapsulate (i.e. to put in a sho ...
- java反射用法示例_Java反射示例教程
java反射用法示例 Java Reflection provides ability to inspect and modify the runtime behavior of applicatio ...
- java apache commons_Apache commons(Java常用工具包)简介
Apache Commons是一个非常有用的工具包,解决各种实际的通用问题,下面是一个简述表,详细信息访问http://jakarta.apache.org/commons/index.html Be ...
最新文章
- ld3320语音识别模块工作原理_变频空调功率模块工作原理与故障检测
- Java类集-list
- 私有方法与静态私有方法_每个私有静态方法都是新类的候选人
- excel服务器2010网站,excel服务器2010
- 记录配置fast rcnn(caffe)仅CPU遇到的问题
- CentOS用户及用户组管理
- [过年菜谱之]红烧甲鱼
- 3年前的一个小项目经验,分享给菜鸟兄弟们(公文收发小软件:前期需求调查部分)...
- sap采购申请自动转采购订单_SAP idoc功能够强大: 采购订单修改自动触发销售订单修改...
- ZEMAX | 如何使用 ISO 元件制图工具
- Cassandra启动过程详解
- 不要STUPID,坚持GRASP和SOLID
- 如何查询iPhone手机的序列号?苹果序列号查询方法
- asm磁盘头自动备份19c-au11
- 查询至少选了1班2号同学所选课的所有同学班号、学号
- 为什么说“公有云”起家的青云科技是“混合云”第一股?
- 电容触摸测试MCU的灵活性
- 快递驿站取件管理系统|基于SpringBoot的快递栈系统设计与实现
- 手机游戏战斗服务器没有响应,奇葩战斗家手游APP无法登陆怎么处理 处理方案一览...
- android开发怎么调用api
热门文章
- 移动端常见布局方式(流式布局、flex弹性布局、less+rem+媒体查询、Bootstrap)
- 红米note9和oppoK7x哪个好?红米note9和oppoK7x区别
- 由于目标计算机积极拒绝,无法连接。 (10061)
- c语言罗,c语言俄罗块游戏程序设计报告.doc
- 用html 做一个低调的邮箱名片
- 留在一线,逃离一线?我从上海举家回成都的生活经历告诉你。。。
- 【单相交流调压电路的simulink仿真】
- PRNG伪随机数的破解方法
- 果动3D应用引领游戏娱乐新玩法
- 跨国企业在中国 | 7000多台霍尼韦尔设备助力广州地铁;玩具反斗城中国门店破200家...