可以通过反射将String放入List中。
那什么是反射呢?
在运行过过程中
- 获取类的名称,方法,属性,注解,类型等。
- 获取任意对象的方法,属性等。并且可以改变对象属性
- 判断一个对象所属的类
- 实例化任意一个类的对象
其实就是java提供的reflect包
回到一开始的那个问题,List list = new ArrayList<>()里面可以放String类型的数据吗?
很显然是可以的,因为list是一个对象,而反射可以获取对象的属性方法,并且改变对象属性。那我们就可以通过list.getMethod()
方法获取list的add
方法,然后将其参数改为String
就可以保存String类型的数据。
@Test
public void test01() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
List<Integer> list = new ArrayList<>();
list.add(3);
Class<? extends List> aClass = list.getClass();
Method add = aClass.getMethod("add", Object.class);
add.invoke(list,new String("老王"));
System.out.println(list);
}
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
public class Demo {
public static void main(String[] args) throws NoSuchMethodException,
SecurityException, IllegalAccessException,
IllegalArgumentException, InvocationTargetException {
List<String> list = new ArrayList<String>();
Class<?> cls = list.getClass();
Method method = cls.getMethod("add", Object.class);
method.invoke(list, 1);
method.invoke(list, "s");
method.invoke(list, 2);
method.invoke(list, 4);
System.out.println(list);
ArrayList<Object> obj = new ArrayList<Object>();
obj.addAll(list);
for (int i = 0; i < obj.size(); i++) {
System.out.println(obj.get(i));
}
}
}