A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. package lwj_test;

  2. import java.lang.reflect.Method;
  3. import java.util.ArrayList;

  4. /*
  5. * 我给你ArrayList<Integer>的一个对象,我想在这个集合中添加一个字符串数据,如何实现呢?
  6. *
  7. * 通过反编译后可以看出,add方法实质上接收的还是Object类型,所以我们办法获取Arralist的字节码文件对象然后对add方法进行操作
  8. * 分析:
  9. *         A:创建集合对象
  10. *         B:获取该集合类的字节码文件对象
  11. *         C:获取集合中add方法对应的Method对象
  12. *         D:调用这个方法,参数为String类型
  13. *         E:打印这个集合
  14. */
  15. public class ArrayListDemo {
  16.     public static void main(String[] args) throws Exception {
  17.         ArrayList<Integer> al = new ArrayList<Integer>();
  18.         al.add(10);

  19.         // 反编译后是这样的
  20.         // ArrayList al = new ArrayList();
  21.         // al.add(Integer.valueOf(10));
  22.         // 反编译后可以看出:是不需要泛型的,泛型只是编译时其作用的,所以说add方法参数的默认类型是Object

  23.         // 获取ArrayList类的字节码文件对象
  24.         Class c = ArrayList.class;

  25.         // 获取add方法对应的Method对象
  26.         Method method = c.getDeclaredMethod("add", Object.class);

  27.         // 调用这个方法
  28.         method.invoke(al, "hello");
  29.         method.invoke(al, "world");
  30.         method.invoke(al, "java");
  31.         method.invoke(al, 'a');
  32.         System.out.println(al);
  33.         // al.add("hello");
  34.     }
  35. }
复制代码


3 个回复

倒序浏览
我记得原来有个人发了个贴是自己额外造了个方法,没用反射也给存里了,方法参数不写泛型就可以了.也就是说不让编译器发现就没问题.

点评

有吗?有看到的告知我一下哦  发表于 2015-2-11 17:50
回复 使用道具 举报
我能给你写出来,原帖早不知道沉到哪里去了.下面是我自己写的,不能保证和原来一样,但大致是一个意思:

  1. import java.util.ArrayList;

  2. public class Test1 {
  3.         public static void main(String[] args) {
  4.                 ArrayList<Integer> al = new ArrayList<>();
  5.                 conceal(al,"这是String对象");
  6.                 System.out.println(al);
  7.         }
  8.        
  9.         public static void conceal(ArrayList al,String s){
  10.                 al.add(s);
  11.         }
  12. }
复制代码



adaaaaaaaaaaaaaaaa.png (11.75 KB, 下载次数: 47)

adaaaaaaaaaaaaaaaa.png

评分

参与人数 1技术分 +2 收起 理由
lwj123 + 2

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马