import java.util.ArrayList;public class ArrayListTest {
public static void test(ArrayList<?> list){
System.out.println(list);
list.add(new Integer(4), null);
list.add(new Integer(4)); //凭什么这个添加就不成功??
}
}
public static void test(ArrayList<?> list){
System.out.println(list);
list.add(new Integer(4), null);
list.add(new Integer(4)); //凭什么这个添加就不成功??
}
}
http://whitesock.javaeye.com/blog/185692
http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf
list.add(new Integer(4), null);为什么会成功呢?list.add()两个参数的方法有一个是按照索引往里面添加东西的,jdk5以后可以自动拆装箱,因此,这个相当于:
list.add(4,null);
而,因为List<?>是未知类型,因为不能添加任何类型,只能添加null了,null可以当成任意类型。
反编译字节码有这么两句:
13: invokespecial #5; //Method java/lang/Integer."<init>":(I)V
16: invokevirtual #6; //Method java/lang/Integer.intValue:()I
可以看出来。
list.add(new Integer(4)); 是将4这个对象加到列表尾部。
添加不成功的原因是类型不匹配。ArrayList<?> 其中?是通配符表示可以是任何对象。假如我传入的是一个ArrayList<String>这样的list那不是出错了吗。
就是没得商量!!!
什么对象也不能往里加。
那还要这个东东干吗》!!????