43

为什么会这样:

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

但这不会:

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

3 回答 3

71

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

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

你可以这样做:

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

asList可以采用“vararg”参数。

于 2012-05-23T20:25:17.357 回答
13

您的问题是为什么一个有效而另一个无效,对吗?

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

您似乎暗示的是您想要传递数组初始化程序而不提供完整的数组创建表达式(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中所述。

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

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

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

或者简单地传递将自动映射到数组的变量参数:

List<String> list = Arrays.asList("a","b","c");
于 2012-05-23T20:44:42.247 回答
9

你可以试试

List<String> list = Arrays.asList(new String[] {"a","b","c"});
于 2012-05-23T20:25:25.737 回答