- package lwj_test;
- import java.lang.reflect.Method;
- import java.util.ArrayList;
- /*
- * 我给你ArrayList<Integer>的一个对象,我想在这个集合中添加一个字符串数据,如何实现呢?
- *
- * 通过反编译后可以看出,add方法实质上接收的还是Object类型,所以我们办法获取Arralist的字节码文件对象然后对add方法进行操作
- * 分析:
- * A:创建集合对象
- * B:获取该集合类的字节码文件对象
- * C:获取集合中add方法对应的Method对象
- * D:调用这个方法,参数为String类型
- * E:打印这个集合
- */
- public class ArrayListDemo {
- public static void main(String[] args) throws Exception {
- ArrayList<Integer> al = new ArrayList<Integer>();
- al.add(10);
- // 反编译后是这样的
- // ArrayList al = new ArrayList();
- // al.add(Integer.valueOf(10));
- // 反编译后可以看出:是不需要泛型的,泛型只是编译时其作用的,所以说add方法参数的默认类型是Object
- // 获取ArrayList类的字节码文件对象
- Class c = ArrayList.class;
- // 获取add方法对应的Method对象
- Method method = c.getDeclaredMethod("add", Object.class);
- // 调用这个方法
- method.invoke(al, "hello");
- method.invoke(al, "world");
- method.invoke(al, "java");
- method.invoke(al, 'a');
- System.out.println(al);
- // al.add("hello");
- }
- }
复制代码
|
|