用Arrays.asList初始化List<>

44

为什么这样会起作用:

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

但这个不行:

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

75

在构造和赋值数组时,这是一种仅可用的简写形式。

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

不过,你可以这样做:

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

asList可以接受“可变参数”。


1
第二个代码示例在Java 8中无法编译。它显示“无法将List转换为List<String>”。 - BlueRaja - Danny Pflughoeft
2
这不是真的,在Java 5至11中都可以正常工作,我刚刚测试了所有版本。@BlueRaja-DannyPflughoeft,你可能犯了一些错误,也许是导入错误,比如java.awt.List或类似的问题? - Mattias Isegran Bergander

13

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

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

您似乎想要传递一个数组初始化程序,而不提供完整的数组创建表达式(JLS 15.10)。

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

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

JLS 10.6 数组初始化器所述,或者

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

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

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

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

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

或者直接传递变量参数,这些参数将自动映射到一个数组中:

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

9
你可以尝试。
List<String> list = Arrays.asList(new String[] {"a","b","c"});

2
不,你可以使用Arrays.asList("a", "b", "c");,这样更短,并且更接近于原始问题。 - Tim Pote
6
托马斯所说的仍然有效,不应该被点踩。 - Jeshurun
1
@TimPote 哎呀,我该说什么好呢……我改了啊。但你也不用这么挑剔吧。 - user219882
2
@Tomas 抱歉,我不是在挑剔,但我不想让 OP 误解。这个解决方案确实有另外一种更短的替代方法。如果没有人说出来,他可能会相信你的方法。 - Tim Pote
1
@TimPote 同意,很多人不回复,而且我觉得那个未解决的DV不是你的。另外,如果一个非常简短的答案不完全正确,很容易引起DV。我猜可能是一种直觉反应在起作用... - Marko Topolnik
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接