一、问题
在定义泛型的集合ArrayList<Integer>list中存入一个String对象。
二、分析
java泛型作用于编译时期,在运行时起泛型会被擦除,而反射的功能和目的恰好是获取一个对象的运行时信息,因此只需要利用反射获取到list的add方法即可。通过反射获取list对象的add方法,打印结果——public boolean java.util.ArrayList.add(java.lang.Object),可知实际上java泛型只作用于编译期,等到运行时和老版本JDK定义是没差别,因此该问题可以利用反射解决,实现代码如下。
三、解答
package pro;
import java.lang.reflect.Method;
import java.util.ArrayList;
public class Demo {
public static void main(String[] args) throws Exception {
//声明Integer的泛型ArrayList对象,并放入Integer实例
ArrayList<Integer> intList = new ArrayList<>();
intList.add(new Integer(5));
intList.add(7);