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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Rain2692 高级黑马   /  2014-12-13 19:41  /  1416 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

问:ArrayList list = new ArrayList(); 在这个泛型为Integer的ArrayList中存放一个String类型的对象。
     使用反射的思想去做。。
  1. import java.util.*;
  2. import java.lang.reflect .*;
  3. class  RefTest
  4. {
  5.         public static void main(String[] args)throws Exception
  6.         {
  7.                 ArrayList<Integer> list = new ArrayList<Integer>();
  8.                 ArrayList<String> str =(ArrayList<String>)list.getClass().getConstructor().newInstance();
  9.                 str.add("Hello World!!!");
  10.                 str.add("Hello YourFamily!!!");
  11.                 str.add("Hello YourCountry!!!");

  12.                 System.out.println(str);
  13.         }
  14. }
复制代码

7 个回复

倒序浏览
错啦,不是让你用反射创建一个泛型为String的集合
应该是这样:
  1. ArrayList<Integer> al=new ArrayList<Integer>();
  2.                
  3.                 Class clazz=al.getClass();
  4.                 Method method=clazz.getMethod("add", Object.class);
  5.                 method.invoke(al, "haha");
复制代码


回复 使用道具 举报
冥夜 发表于 2014-12-13 19:51
错啦,不是让你用反射创建一个泛型为String的集合
应该是这样:

恩,我理解错了。。
回复 使用道具 举报
经过测试,简单的理解错了题意,其实很简单。。。测试代码如下:
  1.         ArrayList<Integer> list = new ArrayList<Integer>();
  2.                 Method[] Me = list.getClass().getMethods();
  3.                 for(Method me:Me)
  4.                 {
  5.                   if(me.getName()=="add")//有两个add方法
  6.                   System.out.println(me);
  7.                 }
  8.             Method M = list.getClass().getMethod("add",Object.class);
  9.            System.out.println(M.invoke(list,"Hello"));//这两段代码是等价的
  10.            System.out.println(Me[1].invoke(list,"Hello"));

复制代码
回复 使用道具 举报
Rain2692 发表于 2014-12-13 20:21
经过测试,简单的理解错了题意,其实很简单。。。测试代码如下:

理解了一下,为什么是双参数的那个方法呢,原因是因为在获取字节码的同时,ArrayList擦除了泛型的限制,变成了Object的类型,而是双参数是因为ArrayList底层是数组结构的,int是下标
回复 使用道具 举报
都是大神啊。我马上也要学到这了。。。。等我学会了再来看这个吧
回复 使用道具 举报
:(一点反射都没看的奔泪飘过。。。。
回复 使用道具 举报
原来是理解错了呀~不过看着简单,做起来还真不是很好想啊~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马