先回答第一个问题
通过反射已经将数据存进去了,你的问题可能是因为限定了<String>泛型,所以取不出来- ArrayList<String> collcetion2 = new ArrayList<String>();
- collcetion2.add("abc");
- collcetion2.getClass().getMethod("add", Object.class).invoke(collcetion2, 78);
- System.out.println("1");
- System.out.println(collcetion2.get(0));
- System.out.println(collcetion2.get(1)); //可以在这里加断点调试下,collcetion2里面果然有一个intger呵呵.
复制代码 如果你用一个ArrayList collection=collcetion2;在这样的情况下,调用
System.out.println(collection.get(0));
System.out.println(collection.get(1));
都没有了ArrayList<String> collcetion2 的类型限定,所以你的78是可以输出出来的
第二个问题包含多个内容
方法一:
ArrayList<Integer> collcetion3 = new ArrayList<Integer>(); 常规的声明方法
collcetion3.add(12345);
collcetion3.getClass().getMethod("add", Object.class).invoke(collcetion3,"abcd"); 这里通过反射调用了add方法
System.out.println(collcetion3.get(0));
System.out.println(collcetion3.get(1));
方法二:
ArrayList collection=collcetion3.getClass().newInstance(); 这里通过反射找到了类,直接调用反射的构造方法
collection.add("icast"); 常规的调用方法
System.out.println(collection.get(0));
其实你可以这样写
ArrayList<Integer> collcetion3 = new ArrayList<Integer>();
ArrayList collection=collcetion3.getClass().newInstance();
collcetion.getClass().getMethod("add", Object.class).invoke(collcetion,"abcd");
全用反射来玩呵呵
|