集合泛型:

可以放任何对象的 ArrayList  ArrayList list = new ArrayList();  没有限定泛型类型.

list.add("lilin");list.add(100);System.out.println(list);//很容得知结果能够是["lilin",100];

ArrayList<String> list1 = new ArrayList<String>(); 限定了只能存放String类型的数据

list1.add("lilin");
// String 泛型的集合 是不能添加int的类型的数据的
// list1.add(100);//此时编译是不会通过的,泛型检查了输入的正确性:

泛型的检查,只会在编译的时候检查,如果我们能够绕过编译的动作,就能避开输入的正确的检查操作,导致String泛型的集合中会存在不是String类型的数据.

反射reflect的操作,无论是CLass Method Filed 等,都是运行时加载的,不需要通过编译操作.

//下面通过反射操作,实现把int 100  放入  String泛型的list中去:

ArrayList<String> list = new ArrayList<String>();
Class c = list.getClass();
try {
       //通过反射,获取到list的add方法,简单处理异常信息
Method m = c2.getMethod("add", Object.class);
       //通过方法的反射,就能把int类型的数据,添加到string泛型的list中去
     m.invoke(list1, 100);
        //结果很明显,100 能够成功的添加进去
System.out.println(list1);
        //此时要特别注意的:不能在用String 类型来for循环当前的list; 在循环到int的100会跑出类型不匹配的异常信息
for (String s : list1) {
System.out.println(s);
}
} catch (Exception e) {
e.printStackTrace();
}

其实:本质的原因是,泛型主要是控制输入的正确验证的,而编译后的泛型集合类型,也就是  Class c1 = list.getClass();  Class c2 = list1.getClass();

在编译后,集合的泛型是去泛型的,通过验证System.out.println(c1 == c2);   结果是true,也就是集合编译后,都是同一个类类型.

所以:集合的泛型和反射的相关的方法结合使用时,要特别注意,反射的是运行时加载的,集合的编译检查输入的正确是会被绕过的.

reflect 反射结合集合泛型的总结的更多相关文章

  1. Java反射的理解(六)-- 通过反射了解集合泛型的本质

    Java反射的理解(六)-- 通过反射了解集合泛型的本质 上述写了那么多,我们可能会有个疑问,为什么要用反射,步骤比我们常规的加载类操作复杂多了,别急,这个问题我最后才解答,我们先来了解集合泛型的本质 ...

  2. java反射--通过反射了解集合泛型的本质

    通过Class,Method来认识泛型的本质 package com.reflect; import java.lang.reflect.Method; import java.util.ArrayL ...

  3. [Java反射基础四]通过反射了解集合泛型的本质

    本文接上文"方法反射的基本操作",利用反射了解下java集合中泛型的本质 1.初始化两个集合,一个使用泛型,一个不使用 ArrayList list1 = new ArrayLis ...

  4. [javaEE] 反射-通过反射了解集合泛型本质

    java中的泛型是防止错误输入的,只在编译时刻起作用 package com.tsh.reflect; import java.lang.reflect.Method; import java.uti ...

  5. java通过反射了解集合泛型的本质

  6. Java reflect 反射学习笔记

    1. class 类的使用 万事万物皆对象 (基本数据类型, 静态成员不是面向对象), 所以我们创建的每一个类都是对象, 即类本身是java.lang.Class类的实例对象, 但是这些对象不需要 n ...

  7. java reflect反射---Java高级开发必须懂的

    理解反射对学习Java框架有很大的帮助,如Spring框架的核心就是使用Java反射实现的,而且对做一些Java底层的操作会很有帮助.  一.Class类的使用         1.万事万物皆对象,( ...

  8. Java —— Reflect反射机制

    JAVA反射机制是在运行时,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java的反射机制. ...

  9. 已看1.熟练的使用Java语言进行面向对象程序设计,有良好的编程习惯,熟悉常用的Java API,包括集合框架、多线程(并发编程)、I/O(NIO)、Socket、JDBC、XML、反射等。[泛型]\

    1.熟练的使用Java语言进行面向对象程序设计,有良好的编程习惯,熟悉常用的Java API,包括集合框架.多线程(并发编程).I/O(NIO).Socket.JDBC.XML.反射等.[泛型]\1* ...

随机推荐

  1. js 按钮连击 减少触发事件次数

    <body> <input type="button" onClick="testbtn()" value="测试按钮"& ...

  2. python 整型,布尔值,字符串相关

    1.整型(int) 就是所有整数, 2.布尔值(bool) True False 0,"",[],{},(),none为False 3.字符串(str) 字符: 是单一文字符号 字 ...

  3. Visual Studio 2015中 安卓环境 cannot find adb.exe in specified sdk path

    安装完成后 发现 C:\Program Files (x86)\Android\android-sdk\platforms 是空的,用SDK Manager进行安装时发现 它需要往C:\Program ...

  4. 关于MySQL日期操作函数 date_formate 的使用

    基本语法:DATE_FORMAT(date,format)说明:date 参数是合法的日期.format 规定日期/时间的输出格式.可以用的格式主要有格式 描述%a 缩写星期名%b 缩写月名%c 月, ...

  5. BZOJ 1042: [HAOI2008]硬币购物 容斥原理_背包_好题

    Description 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4.某人去商店买东西,去了tot次.每次带di枚ci硬币,买s i的价值的东西.请问每次有多少种付款方法. 题解: 十分喜 ...

  6. vim牛逼的code工具: ctags+ cscope

    自己总结 在我的工作目录里的.vimrc中做了这样的配置:   set tags=tags;   set autochdir 在项目根目录里利用"sudo ctags -R *", ...

  7. DNS解析流程原理(图例)

    13台根服务器的dns: 1.root-servers.net198.41.0.4美国2.root-servers.net192.228.79.201美国(另支持IPv6)3.root-servers ...

  8. Python3爬虫环境配置

    一.包管理工具Anaconda安装 1.安装直接在官网下载最新版本的 https://www.continuum.io/downloads 2.配置环境变量PATH:C:\Users\Administ ...

  9. html5 过程解决问题收集

    1.使用画布时报错误: Uncaught TypeError: Object [object Object] has no method 'getContext' . 解决方法: $(function ...

  10. 01springMVC入门

    1      MVC模式回顾 Spring MVC是一种基于MVC的Web应用框架. MVC是一种设计模式,MVC在b/s系统下的应用: 执行步骤: 发出请求,请求到MVC当中的C,C接收请求后并不能 ...