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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© heheka123 中级黑马   /  2014-4-21 20:12  /  1733 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 heheka123 于 2014-4-22 13:57 编辑

一个ArrayList<Integer>  list = new ArrayList<Integer>(); 在这个集合里面,怎么存进去一个String类型呢?

13 个回复

倒序浏览
{:3_46:}
难道不是用list.add(String类型)这样么?
回复 使用道具 举报
kuroro自走核炮 发表于 2014-4-21 20:15
难道不是用list.add(String类型)这样么?

不是的, 一激动打错了   是Integer类型的集合

点评

囧TL  发表于 2014-4-21 20:24
回复 使用道具 举报
只有通过反射了吧
回复 使用道具 举报
反射:
  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. }
复制代码




回复 使用道具 举报
应该是这样吧
  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. }
复制代码
回复 使用道具 举报

恩, 我知道怎么弄了
  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.         }
复制代码
回复 使用道具 举报
这个由于只能定义了泛型只能存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,已经将这个参数存进去了。

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
探花 中级黑马 2014-4-21 21:31:08
9#
ArrayList<String>  list = new ArrayList<String>(); 是这样吗
回复 使用道具 举报
Integer类型存String类型进去吗?
回复 使用道具 举报
用反射取得List中的add方法,将String类型的参数传入即可。
回复 使用道具 举报
这是面试考的题??
回复 使用道具 举报
你都声明是Integer类型了 不要做不必要的麻烦,此问题除了能让你对反射和泛型了解的深刻一点
其余一点用都木有
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马