好像没有区别吧??

解决方案 »

  1.   

    对于调用者是没什么区别,但是对于这2个list是不同的。传统的ArrayList不需要解释,但是ArrayList<?>是范型,它代表未知类型。所以你可以调list.add(new Object()) 给传统ArrayList,但是会在<?>造成编译错误。
      

  2.   

    ArrayList<T>  是泛型的意思是这个ArrayList里面只能放T类型的,例如ArrayList<String> 中只能放String放其他的类型就会报错,而且取的时候可以直接赋给String,不用再强制转换
      

  3.   

    1:对于传统的ArrayList,你可以add随意的对象,譬如list.add("a");list.add(new Object());2:对于ArrayList<?>,因为你不知道它元素是什么类型,可能是个ArrayList<String>,也可能是个ArrayList<Object>所以不能调list.add("a");list.add(new Object());否则会有编译错误。
      

  4.   

    <?> 应该是个错误的写法
      

  5.   

    package com.xuz.csdn.june9;import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;public class ListTest { public static void main(String[] args) {
    List<? extends Number> list = new ArrayList<Integer>();
    test(list); List<Number> list2 = new ArrayList<Number>();
    test2(list2); test3(list2); } private static void test3(List<Number> list2) {
    list2.add(new Integer(1));
    } private static void test2(List<? super Number> list2) {
    list2.add(new Integer(1));
    } private static void test(List<? extends Number> list) {
    list.add(0, null);
    list.add(new Integer(1), null); System.out.println(list);
    }}
      

  6.   

    是泛型,看看就懂了,泛型增加了安全性,增加了List安全性检查
      

  7.   

    7楼,你的编译器对于
    ArrayList<?> a = new ArrayList<?>();
    是出错的吗?
    有鬼了。
    大家也试试