Arraylist到Array转换 - toArray()函数推断类型不符合上限错误

时间:2014-09-30 01:29:22

标签: java

这是代码sinplet:

Excel excel = new Excel();
ArrayList<Integer> a1=excel.readExcelSheet("C:\\Users\\Madhukar\\Desktop\\Employee.xls");
        System.out.println("Using Iterator");
        Iterator iterator = a1.iterator();
        while (iterator.hasNext()) {
       System.out.println(iterator.next());}
        int x=a1.size();
        int[] a3=new int[x];
        a3=a1.toArray(a3);

这是错误消息:

  

没有为toArray找到合适的方法(int [])       方法AbstractCollection.toArray(T#1 [])不适用         (推断类型不符合上限)           推断:int           上限(对象)

  where T#1,T#2 are type-variable...

2 个答案:

答案 0 :(得分:7)

原始人和仿制药不匹配。您需要Integer[]而不是int[]

答案 1 :(得分:4)

谷歌番石榴救援!

General Disarray "Google already did it!"

来解释

如果您需要做某事,Google的某些人可能需要在某个时间做同样的事情并在Guava中进行经过严格测试的实施。

如果它不在番石榴中,可能有充分的理由不去做你想做的事。

JavaDoc Ints.toArray()

  

返回一个包含collection的每个值的数组,转换为a   以Number.intValue()的方式的int值。元素是从中复制的   参数集合,如同通过collection.toArray()。打电话给这个   方法与调用该方法一样是线程安全的。

import com.google.common.primitives.Ints;

import java.util.ArrayList;
import java.util.List;

public class ObjectListToPrimitiveArray
{
    public static void main(final String[] args)
    {
        final List<Integer> il = new ArrayList<>();
        il.add(0);
        il.add(1);
        il.add(2);
        il.add(3);

        final int[] ia = Ints.toArray(il);

        System.out.println(Arrays.toString(ia));
    }
}

如果您正在利用Guava,最好使用不可变列表构建器

public static void main(final String[] args)
{
    final List<Integer> il = ImmutableList.<Integer>builder()
            .add(0)
            .add(1)
            .add(2)
            .add(3).build();

    final int[] ia = Ints.toArray(il);

    System.out.println(Arrays.toString(ia));
}

两个输出:

[0, 1, 2, 3]