本帖最后由 黄锦成 于 2012-12-29 22:51 编辑
//-----------------------第二段代码报了异常-----------------------------
ArrayList<Integer> collection = new ArrayList<Integer>();
collection.add(1);
collection.add(2);
//利用反射,在运行期添加一个String元素
Method add = collection.getClass().getMethod("add", Object.class);
//往只能存Integer的ArrayList中,利用反射存入String,取出String不会出现ClassCastException
add.invoke(collection, "this is");
System.out.println(collection.get(2));
ArrayList<String> collection1 = new ArrayList<String>();
collection1.add("java01");
collection1.add("java02");
//利用反射,在运行期添加一个Integer元素
Method add1 = collection1.getClass().getMethod("add", Object.class);
//往只能存String的ArrayList中,利用反射存入Integer,取出Integer时出现ClassCastException
add1.invoke(collection1, 100);
System.out.println(collection1.get(2));//提示我这行错了
第二段代码我是拷贝第一段的代码,然后修改了一下类型,变量名
同样是反射在运行期往ArrayList中添加其他类型的元素,在第一段代码不报ClassCastException,成功取出
而在第二段代码中,却出现了ClassCastException,错误提示如下:
Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String |