【问题标题】:Why does Arrays.asList on an int[] return a List<int[]>, and not a List<int>?为什么 int[] 上的 Arrays.asList 返回 List<int[]>,而不是 List<int>?
【发布时间】:2011-07-01 00:35:21
【问题描述】:

考虑这段代码:

int[] tcc = {1,2,3};
ArrayList<Integer> tc = Arrays.asList(tcc);

对于上述情况,Java 抱怨它无法从List&lt;int[]&gt; 转换为ArrayList&lt;Integer&gt;

这是怎么回事?

为什么是List&lt;int[]&gt; 而不是List&lt;int&gt;

【问题讨论】:

    标签: java arrays list arraylist


    【解决方案1】:

    一个 ArrayList 只能保存对象而不是诸如 int 之类的原始对象,并且由于 int != Integer 您无法使用原始数组执行您想要执行的操作,就这么简单。不过,这适用于 Integer 数组。

    【讨论】:

    • 他也可以这样做:Arrays.asList(1, 2, 3);
    • 它被称为自动装箱,结合可变参数语法......所以实际上你在这里创建了一个整数数组。
    【解决方案2】:

    这将起作用:

    ArrayList tc = new ArrayList(Arrays.asList(1,2,3));

    【讨论】:

    • 也许我看错了什么,但我看不出重点。假设我得到一个 int[] 参数;我该怎么办?
    【解决方案3】:

    你可以这样写:

    List<int[]> tc = Arrays.asList(tcc);
    

    Arrays.asList 返回一个 List,而不是 ArrayList。由于 Arrays.asList 是一个 varargs 函数,它认为 tcc 是一个更大数组的一个元素。

    如果您只想拥有一个整数列表,则必须将其重写为 Hovercraft Of Eel 答案的 cmets 中提到的 SB

    List<Integer> tc = Arrays.asList(1, 2, 3);
    

    或者,如果您将tcc 设为Integer[],您仍然可以通过显式请求整数的List 来将您的数组用作以下sn-p 中的参数,并提供一个与传递数组:

     Integer[] tcc = {1,2,3};
     List<Integer> tc = Arrays.<Integer>asList(tcc);
    

    【讨论】:

    • 如果你有一个 int[] 参数呢?
    猜你喜欢
    • 2016-09-07
    • 1970-01-01
    • 2020-07-03
    • 1970-01-01
    • 2016-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多