【发布时间】:2012-12-30 19:26:28
【问题描述】:
Arrays.asList 返回一个类型化的列表。但是 List 是一个接口,那么如何实例化呢?如果尝试实例化一个类型化的 List,我会收到一条错误消息,指出这是不可能的。
编辑
没关系,我知道发生了什么,只是被文档弄糊涂了一会儿。
【问题讨论】:
Arrays.asList 返回一个类型化的列表。但是 List 是一个接口,那么如何实例化呢?如果尝试实例化一个类型化的 List,我会收到一条错误消息,指出这是不可能的。
编辑
没关系,我知道发生了什么,只是被文档弄糊涂了一会儿。
【问题讨论】:
这是一个Arrays.ArrayList,不应与java.util.ArrayList 混淆。它是数组的包装器,这意味着您所做的任何更改都会更改原始数组,并且您无法添加或删除条目。通常它与 ArrayList 结合使用,如
List<String> words = new ArrayList<>(Arrays.asList("Hello", "There", "World"));
【讨论】:
List 不能被实例化,当然。但是您可以实例化一个实现 List 的类——例如,ArrayList 或LinkedList 等。这些类实际上是Lists。返回List(接口类型)的意义在于该方法可以返回任何实现List 接口的对象,您不必担心它究竟是哪种具体类型。
【讨论】:
来自类数组
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);
【讨论】: