四、反射操作泛型
时间:2020-04-15
本文章向大家介绍四、反射操作泛型,主要包括四、反射操作泛型使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一、泛型
Java 中的泛型仅仅是给编译器 javac 使用的,确保数据的安全性和免去强制类型转换的麻烦,但是一旦编译完成,所有与泛型有关的类型全部擦除。
使用泛型直接读取泛型,是读取不到的,因为反射是操作加载以后的类的。
二、Java 新增的数据类型
为了通过反射操作这些类型以迎合实际开发的需要
1) ParameterizedType : 表 示 一 种 参 数 化 的 类 型 , 比 如 Collection<String>,可以获取 String 信息
2) GenericArrayType:泛型数组类型
3) TypeVariable:各种类型变量的公共父接口
4) WildcardType:代表一种通配符类型表达式, 比如?extendsNumber,?superInteger (Wildcard 是一个单词,就是通配符)
例一:
1 public class Test4 { 2 public static void main(String[] args) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { 3 List<String> alist=new ArrayList<String>(); 4 Class c=alist.getClass();//得到Class对象 5 Method m=c.getDeclaredMethod("add", Object.class); 6 //执行添加方法 7 m.invoke(alist, 123); 8 //输出集合中元素的个数 9 System.out.println(alist); 10 11 } 12 }
例二:
public class User { }
1 public class TestGeneric { 2 public void test01(Map<String,User> map, List<User> list, String s){ 3 System.out.println("TestGeneric.test01()"); 4 } 5 public Map<Integer,User> test02(){ 6 System.out.println("TestGeneric.test02()"); 7 return null; 8 } 9 public String test03(){ 10 System.out.println("TestGeneric.test03()"); 11 return null; 12 } 13 public static void main(String[] args) throws NoSuchMethodException, SecurityException { 14 //获取test01方法的泛型参数信息 15 Class c=TestGeneric.class; 16 Method test01=c.getMethod("test01", Map.class,List.class,String.class); 17 18 //获取带泛型参数的类型 19 Type [] tytes=test01.getGenericParameterTypes(); 20 System.out.println(tytes.length); //3 21 for (Type type : tytes) { 22 //System.out.println("#"+type); 23 if (type instanceof ParameterizedType) { // 判断是否有泛型 24 Type[] genericType= ((ParameterizedType) type).getActualTypeArguments(); 25 //遍历每一个泛型参数中泛型的类型 26 for (Type genType : genericType) { 27 System.out.println("泛型类型:"+genType); 28 } 29 System.out.println("\n--------------------------"); 30 } 31 } 32 33 System.out.println("\n----------------------------\n"); 34 //获取test02方法返回值的泛型信息 35 Method m2=c.getMethod("test02", null); 36 Type returnType=m2.getGenericReturnType(); 37 //判断是否带有泛型 38 if(returnType instanceof ParameterizedType){ 39 Type [] types=((ParameterizedType) returnType).getActualTypeArguments(); 40 for (Type type : types) { 41 System.out.println("返回值的泛型类型:"+type); 42 } 43 } 44 45 System.out.println("\n------------------------------\n"); 46 Method m3=c.getMethod("test03", null); 47 Type returnType3=m3.getGenericReturnType(); 48 //System.out.println(returnType3); 49 System.out.println(returnType3 instanceof ParameterizedType); //返回值没有泛型,为false 50 } 51 52 }
原文地址:https://www.cnblogs.com/qiaoxin11/p/12707102.html
- 以太坊智能合约开发入门
- CatBoost:一个自动处理分类(CAT)数据的机器学习库
- Python机器学习的练习八:异常检测和推荐系统
- Blade 模板中有关 section 的那些事
- 分布式计划任务设计与实现
- 怎样在Python的深度学习库Keras中使用度量
- 网络设备配置管理与版本控制
- 使用Python对Instagram进行数据分析
- 解决多标签分类问题(包括案例研究)
- Docker Compose + GPU + TensorFlow = Heart
- Tensorflow生成模型收集: GANs与VAEs
- How to Install Nginx and PHP-FPM on FreeBSD 10
- 使用Apache MXNet分类交通标志图像
- CentOS 6.4 + nginx-1.2.5 + php-5.4.15 + MySQL-5.5.31
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 浙大版《C语言程序设计(第3版)》题目集 习题2-5 求平方根序列前N项和
- 浙大版《C语言程序设计(第3版)》题目集 习题2-6 求阶乘序列前N项和
- 案例:ADG环境遇到redo日志member路径有误以及RMAN-6571错误
- 浙大版《C语言程序设计(第3版)》题目集 练习3-2 计算符号函数的值
- 浙大版《C语言程序设计(第3版)》题目集 练习3-3 统计学生平均成绩与及格人数
- 浙大版《C语言程序设计(第3版)》题目集 练习3-4 统计字符
- SQL 语句单引号、双引号的用法
- 浙大版《C语言程序设计(第3版)》题目集 练习3-5 输出闰年
- 浙大版《C语言程序设计(第3版)》题目集 练习3-7 成绩转换
- 浙大版《C语言程序设计(第3版)》题目集 练习3-8 查询水果价格
- 浙大版《C语言程序设计(第3版)》题目集 习题3-1 比较大小
- 浙大版《C语言程序设计(第3版)》题目集 习题3-3 出租车计价
- 浙大版《C语言程序设计(第3版)》题目集 习题3-4 统计学生成绩
- 浙大版《C语言程序设计(第3版)》题目集 习题3-5 三角形判断
- 浙大版《C语言程序设计(第3版)》题目集 练习4-3 求给定精度的简单交错序列部分和