【问题标题】:How can Arrays.asList return an instantiated List?Arrays.asList 如何返回一个实例化的 List?
【发布时间】:2012-12-30 19:26:28
【问题描述】:

Arrays.asList 返回一个类型化的列表。但是 List 是一个接口,那么如何实例化呢?如果尝试实例化一个类型化的 List,我会收到一条错误消息,指出这是不可能的。

编辑

没关系,我知道发生了什么,只是被文档弄糊涂了一会儿。

【问题讨论】:

标签: java arrays arraylist


【解决方案1】:

这是一个Arrays.ArrayList,不应与java.util.ArrayList 混淆。它是数组的包装器,这意味着您所做的任何更改都会更改原始数组,并且您无法添加或删除条目。通常它与 ArrayList 结合使用,如

 List<String> words = new ArrayList<>(Arrays.asList("Hello", "There", "World"));

【讨论】:

  • 引用是一个列表,但对象必须是一个具体的类。该类发生在 Arrays.ArrayList 但文档表明它可能会在未来发生变化。
  • 是的,我只是被文档弄糊涂了,不管怎样,干杯。
  • 希望我能给你更多的见解。 ;)
【解决方案2】:

List 不能被实例化,当然。但是您可以实例化一个实现 List 的类——例如,ArrayListLinkedList 等。这些类实际上是Lists。返回List(接口类型)的意义在于该方法可以返回任何实现List 接口的对象,您不必担心它究竟是哪种具体类型。

【讨论】:

    【解决方案3】:

    来自类数组

    public static transient List asList(Object aobj[])
    {
        return new ArrayList(aobj);
    }
    

    因此,当您执行 Arrays.asList(...) 时,您将采用实现 List 的 ArrayList。没有人会知道这一点,除了这个本身。

    • 1 个例子

      String[] 数组 = new String[] {"one","two","three"}; List list = Arrays.asList(array);

    【讨论】:

      猜你喜欢
      • 2016-09-07
      • 1970-01-01
      • 2019-01-14
      • 2019-07-17
      • 2011-07-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-02
      相关资源
      最近更新 更多