初始化 List<> with Arrays.asList

为什么这样做:

String[] array = {"a", "b", "c"};
List<String> list = Arrays.asList(array);

但这不会:

List<String> list = Arrays.asList({"a","b","c"});

答案 1

这是一个仅在构造和分配数组时可用的简写。

String[] array = {"a", "b", "c"};

不过,您可以执行此操作:

List<String> list = Arrays.asList("a","b","c");

可以采取“vararg”参数。asList


答案 2

你的问题是为什么一个有效而另一个不起作用,对吧?

好吧,原因是这不是一个有效的Java表达式,因此编译器不能接受它。{"a","b","c"}

你似乎暗示的是,你想传递一个数组初始值设定项,而不提供一个完整的数组创建表达式(JLS 15.10)。

正如其他人所指出的那样,正确的数组创建表达式是:

String[] array = {"a", "b", "c"};

JLS 10.6 数组初始值设定项中所述,或

String[] array = new String[]{"a", "b", "c"};

JLS 15.10 数组创建表达式中所述。

第二个对于内联很有用,因此您可以直接传递它而不是数组变量。

由于 中的方法使用变量参数,并且变量参数表达式映射到数组,因此您可以传递内联数组,如下所示:asListArrays

List<String> list = Arrays.asList(new String[]{"a", "b", "c"});

或者只需传递将自动映射到数组的变量参数:

List<String> list = Arrays.asList("a","b","c");