初始化列表<>使用Arrays.asList

时间:2012-05-23 20:24:10

标签: java arrays list collections array-initialization

为什么这样做:

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

但这不是:

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

3 个答案:

答案 0 :(得分:62)

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

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

你可以这样做:

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

由于asList可以采用“vararg”参数。

答案 1 :(得分:13)

你的问题是为什么一个有效,另一个没有,对吧?

嗯,原因是{"a","b","c"} 不是有效的Java表达式,因此编译器无法接受它。

您似乎暗示的是,您希望在不提供full array creation expression(JLS 15.10)的情况下传递数组初始值设定项。

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

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

JLS 10.6 Array Initializers中所述,或

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

JLS 15.10 Array Creation Expressions中所述。

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

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

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

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

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

答案 2 :(得分:10)

你可以尝试

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