使用 Arrays.asList 初始化 List<> [重复]

Posted

技术标签:

【中文标题】使用 Arrays.asList 初始化 List<> [重复]【英文标题】:Initialize List<> with Arrays.asList [duplicate] 【发布时间】:2012-05-30 10:25:36 【问题描述】:

为什么会这样:

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");

因为asList 可以接受“vararg”参数。

【讨论】:

第二个代码示例无法在 Java 8 中编译。它说“无法将 List 转换为 List&lt;String&gt; 这不是真的,在 Java 5 到至少 11 中都可以正常工作,刚刚测试了所有。你犯了一些错误@BlueRaja-DannyPflughoeft,可能是错误的导入、java.awt.List 或类似的?【参考方案2】:

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

嗯,原因是"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中所述。

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

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

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

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

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

【讨论】:

【参考方案3】:

你可以试试

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

【讨论】:

不,你可以做Arrays.asList("a", "b", "c");,它更短,更类似于OP的原始问题。 托马斯所说的仍然有效,不值得反对。 @TimPote OMG。我能说什么......我改变了它。但你不必那么挑剔 @Tomas 对不起,不是要挑剔,但我不希望 OP 得到错误的理解。 这个解决方案的另一种更短的替代方案。如果没有人说其他话,他可能会相信你。 @TimPote 同意,许多人没有回应,我认为出色的 DV 不是你的。此外,如果不是绝对正确,一个非常简短的答案会以某种方式邀请 DV。在那里工作时有某种直觉反应,我猜......

以上是关于使用 Arrays.asList 初始化 List<> [重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用 Arrays.asList() 初始化列表的最佳方法是啥[重复]

聊聊Arrays.asList()踩过的那些坑

聊聊Arrays.asList()踩过的那些坑

聊聊Arrays.asList()踩过的那些坑

List || Lists

Arrays.asList()用法梳理