黑马程序员技术交流社区
标题:
什么不可以通过反射在ArrayList<String> list中存入Integer类型的对象
[打印本页]
作者:
win_rainbow
时间:
2015-8-3 11:06
标题:
什么不可以通过反射在ArrayList<String> list中存入Integer类型的对象
通过反射可以在ArrayList<Integer> list中存入String类型对象,为什么不可以再ArrayList<String> list中存入Integer类型的对象呢?
package com.itheima;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;
import java.util.Set;
public class Test5{
public static void main(String []args) throws IOException, ClassNotFoundException, NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, Exception{
List<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
Class<?> cls = list.getClass();
Method m =cls.getMethod("add", Object.class);
m.setAccessible(true);
m.invoke(list, new Integer(1));
System.out.println(list.get(2));
}
}
复制代码
错误提示如下:Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
作者:
g552092947
时间:
2015-8-3 15:12
当你输出的时候list.get(2)使用的是你自己定义String类型的get方法。如果你想得到你反射加进去的数据应该也得用反射的方法得到
Method m1 =cls.getMethod("get", int.class);
Integer a=(Integer)m1.invoke(list, 2);
System.out.println(a);
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2