通过反射绕过编译向泛型为String的ArrayList里面添加整型
来源:互联网 发布:中衡设计怎么样 知乎 编辑:程序博客网 时间:2024/06/05 04:08
反射的操作都是在编译后,在运行的时候,java中集合的泛型是防止错误输入的,
只在编译阶段有效,绕过编译就无效了,编译之后泛型是去泛型化的,利用这一点可以向范型为String的ArrayList里面添加整型
新建ReflectDemo.java
package com.imooc.io;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.util.ArrayList;public class ReflectDemo {public static void main(String[] args){ArrayList list = new ArrayList();ArrayList<String> list2 = new ArrayList<String>();list2.add("hello");//由于list2是范型,只能添加String的类型,以下是错误的//list2.add(20);/* * c1==c2结果返回true说明编译之后集合的泛型是去泛型化的 * Java中集合的泛型,是防止错误输入的,只在编译阶段有效, * 绕过编译就无效了 * 验证:我们可以通过方法的反射来操作,绕过编译 */Class c1 = list.getClass();Class c2 = list2.getClass();System.out.println(c1==c2);try {Method M = c2.getMethod("add", Object.class);M.invoke(list2, 20);System.out.println(list2.size());System.out.println(list2);//现在不能这样遍历,里面添加了整型/*for (String string : list1) {System.out.println(string); }*/} catch (NoSuchMethodException e) {e.printStackTrace();} catch (SecurityException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (IllegalArgumentException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}}}
运行结果:
true
2
[hello, 20]
0 0
- 通过反射绕过编译向泛型为String的ArrayList里面添加整型
- 绕过泛型,通过反射把 String 添加到 List<Integer> 中
- 使用反射在泛型为Integer的ArrayList中添加String类型的数据
- Java反射技术绕过ArrayList泛型编译期间检查, 将不同类型数据存到一起
- 通过反射绕过泛型检查
- JDBC通过反射机制批量的把List里面的对象添加到数据库中
- 通过 prototype 为 JavaScript 的 String 对象添加方法(函数)
- 利用java反射机制绕过编译时的类型检查
- String转化为整型
- 通过反射调用类里面的方法
- 使用反射绕过泛型,直接赋值
- 在泛型为Integer的ArrayList中存放一个String类型的对象。
- 在泛型为Integer的ArrayList中存放一个String类型的对象
- java面试要点---ArrayList list = new ArrayList(); 在这个泛型为Integer的ArrayList中存放一个String类型的对象。
- ArrayList<Integer> list = new ArrayList<Integer>(); 在这个泛型为Integer的ArrayList中存放一个String类型的对象。
- ArrayList<Integer> list = new ArrayList<Integer>();在这个泛型为 Integer 的 ArrayList 中存放一个 String 类型的对象。
- 黑马程序员 :(反射应用 )通过反射讲<Integer>类型的集合中添加一个<String>类型的数据
- java通过反射机制为实例添加数据
- 20150915密度聚类.md
- 如何检查Xcode是否被植入了XcodeGhost
- linux chomd 和 chown
- spring容器创建对象的3种方式(bean的实例化)
- log4j将日志写在多个文件里的方法
- 通过反射绕过编译向泛型为String的ArrayList里面添加整型
- MySQL数据库一些操作
- 《Monitoring with Ganglia》 Chapter 1 Introducing Ganglia
- linux编译调用动态库
- Python 学习 (一) python的基本数据类型 元组 列表 字典
- 所有前缀在串中出现的次数之和 kmp hdu 3336 count the string
- log4j.配置
- Java IO流的学习(1)
- LA2995(迭代更新)