本帖最后由 Kevin.Kang 于 2015-8-12 14:43 编辑
有一个ArrayList<Integer>的对象,如果想要添加一个String类型的元素,可以使用反射。泛型只作用于代码的编译时期,而且此时add()方法的源码,参数是任意类型,并不是泛型。利用反射可以跳过泛型的检查,调用add()方法,直接添加到集合中去。
- package com.kxg_04;
- import java.lang.reflect.Constructor;
- import java.lang.reflect.Method;
- import java.util.ArrayList;
- public class ArrayListDemo {
- public static void main(String[] args) throws Exception {
- ArrayList<Integer> al = new ArrayList<Integer>();
- // 得到al对象的字节码文件对象
- Class c = al.getClass();
- // 获取构造方法
- Constructor con = c.getConstructor();
- // 通过构造方法创建对象
- Object obj = con.newInstance();
- // 通过字节码对象获取add()方法
- Method m = c.getMethod("add", Object.class);
- // 调用add()方法添加String类型元素
- m.invoke(al, "跳过泛型添加元素");
- System.out.println(al);
- }
- }
复制代码
|
|