泛型只是在编译期检查而已,编译后是会被擦除掉的。只是内部会多一步强转的过程,由于这一特性所以要骗过他就不能用正常的写法进行的add。用反射就可以了。 ArrayList<Integer> list = new ArrayList<Integer>(); Method method=list.getClass().getMethod("add",Object.class);//获取他的add方法 method.invoke(list,"testAddStringOnIntergerGenericList");//在list上调用add相当于list.add System.out.println(list.get(0));//你就会发现已经添加进去了
public class AddStringToIntegerList{
public static void main(String[] args){
ArrayList<Integer> aList = new ArrayList<Integer>();
aList.add(1);
aList.add(2);
ArrayList list=aList;//把泛型对象赋值给非泛型变量.
list.add("abc"); //通过这个变量加入非Integer内容。
System.out.println(aList.size());
for(Object o:aList){
System.out.println(o);
}
}
}
ArrayList<Integer> list = new ArrayList<Integer>();
Method method=list.getClass().getMethod("add",Object.class);//获取他的add方法
method.invoke(list,"testAddStringOnIntergerGenericList");//在list上调用add相当于list.add
System.out.println(list.get(0));//你就会发现已经添加进去了