【问题标题】:Arraylist to Array converstion - toArray() function inferred type does not conform to upper bound errorArraylist 到 Array 的转换 - toArray() 函数推断类型不符合上限错误
【发布时间】:2014-09-30 01:29:22
【问题描述】:

这是代码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...

【问题讨论】:

    标签: java


    【解决方案1】:

    基元和泛型不匹配。您需要Integer[] 而不是int[]

    【讨论】:

      【解决方案2】:

      Google Guava 来救援!

      转述General Disarray"Google already did it!"

      如果您需要做某事,Google 的某个人可能需要在某个时候做同样的事情,并在 Guava 中放置一个经过良好测试的实现。

      如果它不在 Guava 中,则可能有充分的理由不做你想做的事。

      JavaDoc Ints.toArray()

      返回一个包含集合每个值的数组,转换为 int 值以 Number.intValue() 的方式。元素复制自 参数集合,就像通过 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]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-05-04
        • 1970-01-01
        • 1970-01-01
        • 2019-04-25
        • 2015-12-12
        • 1970-01-01
        • 2013-05-10
        • 2018-07-17
        相关资源
        最近更新 更多