集合泛型:

可以放任何对象的 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. 是时候学习 RxSwift 了

    相信在过去的一段时间里,对 RxSwift 多少有过接触或耳闻,或者已经积累了不少实战经验.此文主要针对那些在门口徘徊,想进又拍踩坑的同学. 为什么要学习 RxSwift 当决定做一件事情时,至少要知 ...

  2. ZBrush看一个球体如何演变为头发

    对于头发的制作,ZBrush®是多样的,前面的教程中也有讲解,可以用球体作为子工具,用不同笔刷进行雕刻:还可以使用Z球转网格的方式.今天小编讲述一种最简单的方法,使用球体演变头发,这样的创作手法更高效 ...

  3. 解决python3在sublim Text3中中文乱码的问题

    在Tool >> BulidingSystem 中  新建 python3 写入如下代码 { "cmd": ["C:/python3/python.exe&q ...

  4. python与图灵机器人交互(ITCHAT版本)

    #!/usr/bin/env python#-*- coding:utf-8 -*- @Author : wujf @Time:2018/9/5 17:42import requestsimport ...

  5. 佛祖保佑,永不宕机,永无 Bug

    转自:http://top.jobbole.com/17580/ 佛祖保佑,永不宕机,永无 Bug 为何服务器频遭黑客攻击?为何系统频频宕机,别人家系统却稳如泰山,坚如磐石?为何运维人员和系统管理员行 ...

  6. mysql 每个月创建新表

    1.CREATE DEFINER=`root`@`%` PROCEDURE `aa`()BEGIN SET @sqlstr = CONCAT('create table cdrpbx10_',DATE ...

  7. .net 技术基础

    C#常见运算符 一元运算符(+.-.!.~.++.--) 算术运算符(*./.%.+ . – ) 移位运算符(<< .>> ) 关系和类型测试运算符(==.!=.<.&g ...

  8. python中的各个包的安装,用pip安装whl文件

    在安装之前,一直比较迷惑究竟如何用,安装完后,发现竟然如此简单 首先我一般用的是python27,官网下载python27msi安装window7 64位后,已经自带了Pip 和 easy_insta ...

  9. 【转】sql 基本语法

    简单语法:http://www.cnblogs.com/lyhabc/p/3691555.html 数据类型宽度:http://www.cnblogs.com/lyhabc/p/3696629.htm ...

  10. Cocos2d-x碰撞检測

    假设不适用Box2D物理引擎.那么要进行Cocos2d-x的碰撞检測那我们的方法往往就是进行"矩形和点"."矩形和矩形"这样粗略的碰撞检測.我们一般採取开启sc ...