【问题标题】:Create ArrayList of arrays using Arrays.asList [duplicate]使用 Arrays.asList 创建数组的 ArrayList [重复]
【发布时间】:2021-03-10 12:15:51
【问题描述】:

我正在尝试使用 Arrays.asList 方法创建数组的 ArrayList,但是当我只有一个数组要传递到列表中时,我正在努力实现这一目标。

List<String[]> notWithArrays = Arrays.asList(new String[] {"Slot"}); // compiler does not allow this
List<String[]> withArrays = Arrays.asList(new String[] {"Slot"},new String[] {"ts"}); // this is ok

问题在于,有时我只有一个数组作为参数传递,因为它只是一个可迭代的方法,asList 会从中创建字符串列表,而不是必需的 List。有没有一种方法或方法可以制作数组列表 notWithArrays 而无需手动创建?

手动创建示例:

List<String[]> withArraysManual = new ArrayList<>();
withArraysManual.add(new String[] {"Slot"});

【问题讨论】:

  • 你的意思是Arrays.asList(new String[][] {{"Slot"}});

标签: java arrays


【解决方案1】:

我认为您想使用Arrays.asList 创建一个List&lt;String[]&gt;,其中包含字符串数组{"Slot"}

你可以这样做:

List<String[]> notWithArrays = Arrays.asList(new String[][] {{"Slot"}});

或者你可以显式指定泛型类型参数为asList,像这样:

List<String[]> notWithArrays = Arrays.<String[]>asList(new String[] {"Slot"});

【讨论】:

  • 另一种方法是使用List&lt;String[]&gt; notWithArrays = Collections.singletonList(new String[]{"Slot"});
【解决方案2】:

Arrays.asList 有一个可变参数T...。您面临的问题是 Java 有两种方式调用带有可变参数的方法:

  1. 具有多个T 类型的参数
  2. 使用T[] 类型的单个参数

此外,Arrays.asList 是泛型的,并从其参数的类型推断出类型参数T。如果只给出一个数组类型的参数,解释(2)优先。

这意味着当您编写 Arrays.asList(new String[] {"x"}) 时,Java 会将其解释为带有 T = String 的形式 (2) 的调用。

使用多个参数不会造成混淆:Java 总是将其解释为形式 (1) 的调用,并将 T 推断为 String[] 类型。

因此,as khelwood has shown 的解决方案是通过将参数打包到一个额外的数组层中,或者通过显式指定泛型类型参数 T 来消除使用单个参数的调用的歧义。

【讨论】:

    猜你喜欢
    • 2017-08-28
    • 2014-11-01
    • 2015-06-26
    • 2016-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-18
    • 2014-02-16
    • 2013-08-19
    相关资源
    最近更新 更多