// 如何将str="abc"存入到一个List<Integer> 中?
第一种方式:
class Person{}
public class ReflectDemo{
List<Integer> list = new ArrayList<Integer>();
String str3 ="abc";
list.getClass().getMethod("add",Object.class).invoke(list,str3) ;
//此处只能用Object.class,用Integer.class和String.class 都报错误。难道getMethod()这个方法接收的第二个参数不是方法的参数类型的字节码文件?
// 难道getMethod("add",Object.class)是说 反射拿得到的add 方法和 list api下面的add 方法不一样? 求大虾正解。
System.out.println("...."+list);
}
运行结果: ....[abc]
由于以上对Object.class 的思考,我把 List<Integer> list = new ArrayList<Integer>();的泛型换成任意类型。List<String> list = new ArrayList<String>(); List<Person> list = new ArrayList<Person>(); 运行结果依然是 [abc]. 这是不是说明用反射的方式在集合中添加元素时,可以忽略泛型对集合元素的限定?
第二种方式:
我想到另一种方式,可能不正确,求大虾们一起搞定它。
public class ReflectDemo1{
List<Integer> list = new ArrayList<Integer>();
String str3 ="abc";
Constructor <Integer> con;
try {
con = Integer.class.getConstructor(Integer.class);
Integer in= con.newInstance(str3);// 相当于 Integer in = new Integer(str3);
//API--构造方法Integer(String s) 构造一个新分配的 Integer 对象,它表示 String 参数所指示的 int 值。
System.out.println("in"+in);
list.add(in);
} catch (Exception e) {
e.getStackTrace();
}
System.out.println("...."+list);
}
运行结果:....[], in也没有打印说明 try 中的语句可能没有执行。 这是怎么回事?
|