黑马程序员技术交流社区

标题: 大家看看这个面试题怎么做的? [打印本页]

作者: heheka123    时间: 2014-4-21 20:12
标题: 大家看看这个面试题怎么做的?
本帖最后由 heheka123 于 2014-4-22 13:57 编辑

一个ArrayList<Integer>  list = new ArrayList<Integer>(); 在这个集合里面,怎么存进去一个String类型呢?
作者: kuroro自走核炮    时间: 2014-4-21 20:15
{:3_46:}
难道不是用list.add(String类型)这样么?
作者: heheka123    时间: 2014-4-21 20:21
kuroro自走核炮 发表于 2014-4-21 20:15
难道不是用list.add(String类型)这样么?

不是的, 一激动打错了   是Integer类型的集合
作者: osully    时间: 2014-4-21 20:22
只有通过反射了吧
作者: 轻语。    时间: 2014-4-21 20:29
反射:
  1. import java.lang.reflect.Method;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. public class TestFile {
  5. public static void main(String[] args) throws Exception {
  6. List<Integer> list = new ArrayList<Integer>(); //定义Integer泛型
  7. String str = "abc";
  8. Method[] method=list.getClass().getMethods();//取得list的所有方法
  9. System.out.println(method.length);
  10. for(int i=0;i<method.length;i++){
  11. System.out.println(method[i]);//遍历打印list的方法
  12. }
  13. method[0].invoke(list, str);//通过反射来执行list的第一个方法,第一个是list对象,代表该对象的方法,第二个是方法参数
  14. System.out.println(list.size());
  15. for(int i=0;i<list.size();i++){
  16. System.out.println(list.get(i));
  17. }
  18. }
  19. }
复制代码





作者: ⒈心只霸占沵    时间: 2014-4-21 20:34
应该是这样吧
  1. public class Test7 {
  2. public static void main(String[] args) throws Exception{
  3.          List<Integer> list=new ArrayList<Integer>();
  4.          Class listClass=list.getClass();
  5.          List list1=(List) listClass.newInstance();
  6.          list1.add("abc");
  7.          list1.add(122);
  8. }
  9. }
复制代码

作者: heheka123    时间: 2014-4-21 21:11
伍叶竹 发表于 2014-4-21 20:29
反射:

恩, 我知道怎么弄了
  1.         public static void main(String[] args) throws Exception{
  2.                 ArrayList<Integer> list = new ArrayList<Integer>();
  3.                 Method method = list.getClass().getMethod("add", Object.class);
  4.                 method.invoke(list, "abc");
  5.                 for(Object m : list){
  6.                         System.out.println(m);
  7.                 }               
  8.         }
复制代码

作者: a3330682    时间: 2014-4-21 21:23
这个由于只能定义了泛型只能存Integer型,如果要存String类型编译通不过;所以可以通过反射绕过编译器获取其中的方法就可以达到这个效果了。
        ArrayList<Integer>  list = new ArrayList<Integer>();
                Method method=list.getClass().getMethod("add",Object.class );//取得list类的中的add方法
                method.invoke(list, "str");// 将这个方法实例化,传入一个String参数;
                System.out.println(list.size());//输出你结果可以看到为1,已经将这个参数存进去了。
作者: 探花    时间: 2014-4-21 21:31
ArrayList<String>  list = new ArrayList<String>(); 是这样吗
作者: 小周务商    时间: 2014-4-21 22:15
Integer类型存String类型进去吗?
作者: 李海霞java    时间: 2014-4-21 22:26
用反射取得List中的add方法,将String类型的参数传入即可。
作者: Up↑Lee↗    时间: 2014-4-21 22:55
这是面试考的题??
作者: 随风而去    时间: 2014-4-21 23:33
你都声明是Integer类型了 不要做不必要的麻烦,此问题除了能让你对反射和泛型了解的深刻一点
其余一点用都木有




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2