集合泛型:

可以放任何对象的 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. 基于MapReduce的贝叶斯网络算法研究参考文献

    原文链接(系列):http://blog.csdn.net/XuanZuoNuo/article/details/10472219 论文: 加速贝叶斯网络:Accelerating Bayesian ...

  2. (转)基于MVC4+EasyUI的Web开发框架经验总结(7)--实现省份、城市、行政区三者联动

    http://www.cnblogs.com/wuhuacong/p/3841338.html 为了提高客户体验和进行一些技术探索,现在正准备把我自己的客户关系管理系统CRM在做一个Web的版本,因此 ...

  3. C# model代码生成器

    using System.Collections.Generic; using System.Text; public class Class1 { //传递 1.表名 2.列名 3.类型 publi ...

  4. 上传图片到PHP服务器

    test_picture = function() { api.getPicture({ sourceType: 'library', encodingType: 'png', mediaValue: ...

  5. Java中面向对象三大特性之——封装

    概述 面向对象编程语言是对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改. 封装可以被认为是一个保护屏障,防止该类的代码和数据被其他类随意访问.要访问该类的数据,必须通 ...

  6. Spring中xml文档的schema约束

    最开始使用Spring框架的时候,对于其配置文件xml,只是网上得知其使用方法,而不明其意.最近想着寻根问底的探究一下.以下是本文主要内容: 1.配置文件示例.   <?xml version= ...

  7. python编写简单的html登陆页面(2)

    1  在python编写简单的html登陆页面(1)的基础上在延伸一下: 可以将动态分配数据,实现页面跳转功能: 2  跳转到新的页面:return render_template('home1.ht ...

  8. day28 re(正则)模块

    目录 re模块有什么用? re模块的基础使用 元字符 终极 贪婪模式 非贪婪模式 re模块高级 comple match和search re.split() sub和subn 分组 re模块有什么用? ...

  9. python实现定时发送消息

    #!/usr/bin/env python#-*- coding:utf-8 -*- @Author : wujf @Time:2018/8/21 15:59# 自动发送消息from threadin ...

  10. 数据结构(5) 第五天 快速排序、归并排序、堆排序、高级数据结构介绍:平衡二叉树、红黑树、B/B+树

    01 上次课程回顾 希尔排序 又叫减少增量排序 increasement = increasement / 3 + 1 02 快速排序思想 思想: 分治法 + 挖坑填数 分治法: 大问题分解成各个小问 ...