【问题标题】:What is the difference between ArrayList<?>, ArrayList, ArrayList<Object>?ArrayList<?>、ArrayList、ArrayList<Object> 有什么区别?
【发布时间】:2013-09-02 00:37:59
【问题描述】:

谁能解释一下ArrayList&lt;?&gt;ArrayListArrayList&lt;Object&gt; 之间的区别是什么,以及何时使用它们?它们都是相同的,还是在实现层面都有不同的含义?

【问题讨论】:

  • 是时候阅读Java Generics
  • 我一般不放任何参数......反正它的“假”泛型。
  • @texasbruce 这真是个坏主意。
  • @arshajii 有时你必须这样做。就像要作为 JSON 转储的 HashMap 一样,其值可以是字符串、数字或数组等。您不能将泛型指定为 HashMap,或者只能是 Object。
  • @texasbruce 最好使用Object。使用原始类型时可能会发生坏事。

标签: java generics


【解决方案1】:

ArrayList&lt;Object&gt; 具体Objects 的列表,而ArrayList&lt;?&gt; 是我们不确定其具体类型的列表(这意味着除了@987654327,我们不能向列表中添加任何内容@)。当列表的类型不相关时,您将使用后者,例如当您要执行的操作不依赖于列表的类型时。例如:

public static boolean isBigEnough(ArrayList<?> list) {
    return list.size() > 42;
}

generics tutorial 中涵盖了所有内容(请参阅wildcards 部分)。

最后,没有类型参数的ArrayListraw type:它甚至被允许的唯一原因是为了向后兼容低于 5 的 Java 版本,您应该尽可能避免使用它。

【讨论】:

  • 这是一个新的视角 :)
  • 非常好。我在一些测试项目中使用了 ArrayList(正如我在一些教程中看到的那样。)要点是,尽可能使用
【解决方案2】:

ArrayList&lt;?&gt; 表示“包含待确定类型的ArrayList 实例”

ArrayListArrayList 的类

ArrayList&lt;Object&gt; 表示包含 Object 类型的 ArrayList 实例。

这看起来可能是一个很好的文章(以及更多):http://docs.oracle.com/javase/tutorial/java/generics/types.html

【讨论】:

  • 我猜 OP 是在问,既然在 JAVA 中一切都从 Object 扩展而来,那么拥有“要确定的类型”是什么意思?因为列表不接受原语
猜你喜欢
  • 1970-01-01
  • 2014-06-29
  • 1970-01-01
  • 2015-12-07
  • 1970-01-01
  • 2018-10-03
  • 2011-02-28
  • 1970-01-01
相关资源
最近更新 更多