ArrayList<Integer> list = new ArrayList<Integer>(); 在这个泛型为Integer的ArrayList中存放一个String类型的对象
希望给出源代码和详细解析求助!
学习,原来通过反射可以这样做啊我一直弄不清楚这个泛型,在我在看帖子http://bbs.csdn.net/topics/390349747时,偶尔测试发现可以的。但不知道这是为什么?也许我理解错误,希望给予指正。
可以把这个list赋值给一个非泛型的ArrayList变量,就可以加进去其他对象。
泛型只是在编译期检查而已,编译后是会被擦除掉的。只是内部会多一步强转的过程,由于这一特性所以要骗过他就不能用正常的写法进行的add。用反射就可以了。
import java.util.*;
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));//你就会发现已经添加进去了