是不是?包括所有的类,也含Object类?
那具体用法方面区别,体验在哪里呢?

解决方案 »

  1.   

    自己顶下
    个人感觉这两个没什么区别,?或Object都可以代替所有的类,现在发现另一问题,所有已知的类,都用?
    代替好吗?
    比如:本来是List<User> userlist=...,我改为List<?> userlist...,这样好像结果没什么影响,但不知对性能或效率方面,有没影响呢,还是都一样,随便用呢?请大家发表下看法吧,虽说小问题,但把它弄清楚了也好点的。
      

  2.   

    java中的泛型只是源代码中有用, 减少一些类型强转,方便书写和查错,  编译为字节码后其实都一样了;
    源代码中的作用看下面代码List<User> userlist=new ArrayList<User>();
    ....
    User u=userlist.get(0);
    List<?> userlist=new ArrayList<?>();
    ....
    User u=(User)userlist.get(0);
      

  3.   

    ? 和 Object 差不多,不过还是有差别。
    在这种情况下: class<? extends SomeClass> , Object就不能用了Object是一个具体的类名,而?是一个占位符号,表示任何类型,只要是SomeClass类或者子类就可以。
    List<Object>可以放任何类对象
    List<? extends InputStream>就只能放InputStream的实现类了。运行时刻,没错,Java的泛型是不存在,所以说,效率没有任何影响。
      

  4.   

    泛型中使用通配符?代表类型参数可以是任何对象类型,也可以使用extends表示参数类型可以是某类或其子类,参数类型主要是用于解决早期版中集合取数据时的拆箱操作
      

  5.   

    泛型得弄清楚下面这些的区别1,List
    2,List<Object>
    3,List<Number>
    4,List<?>
    5,List<? extends Number>
    6,List<? super Long>普通的泛型使用估计没啥问题,但是带上 ? 的泛型就会变得很复杂。对于 <? super T> 和 <? extends T> 看看这个例子:如果要将某一个数组中的元素拷贝至另一个的话1,先看看这个方法签名:
      public static <T> void copy(List<T> src, List<T> dest)如果 src 和 dest 是相同泛型参数的话,这个签名是没有问题,但是由于泛型类与数组不一样,
    由于泛型类并不具有协变性,也就是说下面的代码是错误的:
      List<Object> objs = new ArrayList<Long>();数组是协变性的,下面的代码是正确的:
      Object[] objs = new Long[4];用这个 copy 方法的话,如果 src 是 List<Long>,而 dest 是 List<Object> 的话,这样
    就会产生编译错误。但是实际上 List<Long> 中的每一个元素是可以赋值给 List<Object> 的,
    因此这个 copy 方法签名还有待完善。由于泛型类不具有协变性,但是 Java 的泛型提供了一个通配符类型 ? 使用这个可以将泛型类变
    成协变的,下面的代码是正确的:
      List<? extends Object> objs = new ArrayList<Long>();<? extends Object> 表示泛型是 Object 或者是 Object 的子类型,同理
    <? super Long> 表示泛型是 Long 或者是 Long 的父类型。这样就可以把 copy 方法完善成为:
      public static <T> void copy (List<? extends T> src, List<? super T> dest)至于其他的,看看下面的语句哪些正确的,哪些是不正确的?Pair 是个泛型类,SubTypeOfPair 是 Pair 的子类Collection<Pair<String, Long>> c1 = new ArrayList<Pair<String, Long>>();Collection<Pair<String, Long>> c2 = c1;            // s1
    Collection<Pair<String, ?>> c3 = c1;               // s2
    Collection<? extends Pair<String, ?>> c4 = c1;     // s3Collection<SubTypeOfPair<String, Long>> c1 = new ArrayList<SubTypeOfPair<String, Long>>();Collection<Pair<String, Long>> c2 = c1;            // s4
    Collection<SubTypeOfPair<String, Long>> c3 = c1;   // s5
    Collection<Pair<String, ?>> c4 = c1;               // s6
    Collection<? extends Pair<String, ?>> c5 = c1;     // s7上面的这些是从我原来回复过的帖子拷贝过来的,供为参考,呵呵 :)
    http://topic.csdn.net/u/20080906/14/efc88816-ba71-473e-8c8d-7a519a1d40c7.html另外,这里有个关于 Java 泛型 FAQ 的站点,里面有很多东西,有兴趣的话可以去看看:
    http://www.angelikalanger.com/GenericsFAQ/JavaGenericsFAQ.html
      

  6.   

    两者有时作用相同
    ?能通配任何类,在诸如<? extends Object>时只能用?
    Object可能在类型检查时更好些
      

  7.   

    LIst和List<?>那不是没区别???????