【问题标题】:Boxing with Arrays.asList()使用 Arrays.asList() 装箱
【发布时间】:2012-01-13 07:00:42
【问题描述】:

在以下示例中:

class ZiggyTest2{
    public static void main(String[] args){

        int[] a = { 1, 2, 3, 4,7};      

        List<Integer> li2 = new ArrayList<Integer>();
        li2 = Arrays.asList(a);     

    }
}   

编译器抱怨 int[] 和 java.lang.Integer 不兼容。即

found   : java.util.List<int[]>
required: java.util.List<java.lang.Integer>
                li2 = Arrays.asList(a);
                               ^

如果我更改列表定义以删除泛型类型,它工作正常。

List li2 = new ArrayList();
  • 编译器不应该将整数自动装箱为整数吗?
  • 如何从一个整数数组中创建一个List&lt;Integer&gt; 对象,使用 Arrays.asList()?

谢谢

【问题讨论】:

标签: java generics collections


【解决方案1】:

删除泛型使其编译,但不起作用。您的列表将包含一个元素,即int[]。 您必须自己循环遍历数组,并手动将每个元素插入到 List 中

【讨论】:

    【解决方案2】:

    Java 不支持将整个基元数组自动装箱到其相应的包装类中。解决方案是使您的数组类型为Integer[]。在这种情况下,每个 int 都会单独装箱到 Integer 中。

    int[] a = { 1, 2, 3, 4, 7 };
    List<Integer> li2 = new ArrayList<Integer>();
    for (int i : a) {
        li2.add(i); // auto-boxing happens here
    }
    

    【讨论】:

      猜你喜欢
      • 2014-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-20
      • 2011-07-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多