先说结论:

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用法与简介相关推荐

  1. java sftp.mkdir 报错,java mkdir用法

    java mkdir用法 [2021-02-10 09:22:55]  简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace("/( ...

  2. java resume过时方法_学点开发|关于Java多线程用法解析

    在进行学习之前,我们先来了解下,什么是Java多线程: 多线程是实现并发机制的一种有效手段.进程和线程一样,都是实现并发的一个基本单位.为了让大家更清晰读懂关于Java多线程用法,由以下几点入手学,帮 ...

  3. Java开源项目EZMorph简介

    http://hi.baidu.com/glfbin/blog/item/1302747e8722852e0cd7daaf.html Java开源项目EZMorph简介 2011-04-30 9:40 ...

  4. java.util.Stack类简介

    转载自  java.util.Stack类简介 Stack是一个后进先出(last in first out,LIFO)的堆栈,在Vector类的基础上扩展5个方法而来 Deque(双端队列)比起St ...

  5. java正则表达式用法示例_Java正则表达式教程及示例

    java正则表达式用法示例 当我开始使用Java时,正则表达式对我来说是一场噩梦. 本教程旨在帮助您掌握Java正则表达式,并让我定期返回以刷新我的正则表达式学习. 什么是正则表达式? 正则表达式定义 ...

  6. java list用法_Java List 用法详解及实例分析

    Java List 用法详解及实例分析 Java中可变数组的原理就是不断的创建新的数组,将原数组加到新的数组中,下文对Java List用法做了详解. List:元素是有序的(怎么存的就怎么取出来,顺 ...

  7. java反射用法示例_Java包| 类型,用法,示例

    java反射用法示例 配套 (Packages) Packages in Java is simply a mechanism to encapsulate (i.e. to put in a sho ...

  8. java反射用法示例_Java反射示例教程

    java反射用法示例 Java Reflection provides ability to inspect and modify the runtime behavior of applicatio ...

  9. java apache commons_Apache commons(Java常用工具包)简介

    Apache Commons是一个非常有用的工具包,解决各种实际的通用问题,下面是一个简述表,详细信息访问http://jakarta.apache.org/commons/index.html Be ...

最新文章

  1. ld3320语音识别模块工作原理_变频空调功率模块工作原理与故障检测
  2. Java类集-list
  3. 私有方法与静态私有方法_每个私有静态方法都是新类的候选人
  4. excel服务器2010网站,excel服务器2010
  5. 记录配置fast rcnn(caffe)仅CPU遇到的问题
  6. CentOS用户及用户组管理
  7. [过年菜谱之]红烧甲鱼
  8. 3年前的一个小项目经验,分享给菜鸟兄弟们(公文收发小软件:前期需求调查部分)...
  9. sap采购申请自动转采购订单_SAP idoc功能够强大: 采购订单修改自动触发销售订单修改...
  10. ZEMAX | 如何使用 ISO 元件制图工具
  11. Cassandra启动过程详解
  12. 不要STUPID,坚持GRASP和SOLID
  13. 如何查询iPhone手机的序列号?苹果序列号查询方法
  14. asm磁盘头自动备份19c-au11
  15. 查询至少选了1班2号同学所选课的所有同学班号、学号
  16. 为什么说“公有云”起家的青云科技是“混合云”第一股?
  17. 电容触摸测试MCU的灵活性
  18. 快递驿站取件管理系统|基于SpringBoot的快递栈系统设计与实现
  19. 手机游戏战斗服务器没有响应,奇葩战斗家手游APP无法登陆怎么处理 处理方案一览...
  20. android开发怎么调用api

热门文章

  1. 移动端常见布局方式(流式布局、flex弹性布局、less+rem+媒体查询、Bootstrap)
  2. 红米note9和oppoK7x哪个好?红米note9和oppoK7x区别
  3. 由于目标计算机积极拒绝,无法连接。 (10061)
  4. c语言罗,c语言俄罗块游戏程序设计报告.doc
  5. 用html 做一个低调的邮箱名片
  6. 留在一线,逃离一线?我从上海举家回成都的生活经历告诉你。。。
  7. 【单相交流调压电路的simulink仿真】
  8. PRNG伪随机数的破解方法
  9. 果动3D应用引领游戏娱乐新玩法
  10. 跨国企业在中国 | 7000多台霍尼韦尔设备助力广州地铁;玩具反斗城中国门店破200家...