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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© s476596497 中级黑马   /  2014-1-20 10:42  /  906 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

ArrayList<Integer> list = new ArrayList<Integer>(); 在这个泛型为Integer的ArrayList中存放一个String类型的对象。


刚开始看到这个题目会想到Integer类中有一个方法parseInt,想到可以用这个方法将字符串转成Integer对象。


public static void addString(){
               
               
                /*这个方法有问题,字符串中定义的是数字的话,将字符串转成int类型,
                 * 可以添加到ArrayList集合中,但是要是是acb的话,就会出现异常*/
                ArrayList<Integer> al = new ArrayList<Integer>();
                String str = new String("123456");
                int i = Integer.parseInt(str);
                al.add(i);
               
                System.out.println("al"+al);
        }


这个方法有问题,然后我们想可以用反射来做

用Method中的methods方法来做,获取集合中的所有方法,然后选第一个add方法。


public static void addString_2(){
                ArrayList<Integer> al1 = new ArrayList<Integer>();
                String str = "abc";
               
                /*我是做用getMethod这个方法做,但是没有成功,产生没有找到这个方法异常,
                我想了一下原因,可能是,我找al1的add方法,参数类型我定义成String,
                因为前面定义al1的参数类型为Integer类型,这个方法和前面的类型应该一致,
                所以会出错,但是定义成object类型就不会出错
                */
               
                try {
                        //取得Arraylist的所有方法
                        Method[] method=al1.getClass().getMethods();
                        //通过反射来执行list的第一个方法,第一个是list对象,
                        //代表该对象的方法,第二个是方法参数
                        method[0].invoke(al1,str);
                        for(int i=0;i<al1.size();i++){
                        System.out.println(al1.get(i));
                        }
                       
                } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
        }

我们还可以用Method中的method方法来做,但是要注意一点,参数类型要定义成Object。


public static void addString_3(){
                ArrayList<Integer> al2 = new ArrayList<Integer>();
                String str = "abc";
                try {
                        Method method = al2.getClass().getMethod("add", Object.class);
                        method.invoke(al2,str);
                        System.out.println(al2.toString());
                } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
               
        }

评分

参与人数 1技术分 +1 收起 理由
黄晓鑫 + 1

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马