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();
}
}
|