使用 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<String>
”
这不是真的,在 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<> [重复]的主要内容,如果未能解决你的问题,请参考以下文章