【问题标题】:List class's toArray in Java- Why can't I convert a list of "Integer" to an "Integer" array?Java中的List类的toArray-为什么我不能将“Integer”列表转换为“Integer”数组?
【发布时间】:2011-11-09 01:19:12
【问题描述】:

我定义了List<Integer> stack = new ArrayList<Integer>();

当我尝试通过以下方式将其转换为数组时:

Integer[] array= stack.toArray();

我得到了这个例外:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
Type mismatch: cannot convert from Object[] to Integer[].

为什么?它是完全相同的类型——Integer 到 Integer。当类为 father-and-son relation 时,这与这种一般情况不同。

我试着做演员:

    Integer[] array= (Integer[]) stack.toArray();

但在这里我得到了这个错误:

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer;

有什么问题?

【问题讨论】:

    标签: java arrays list toarray


    【解决方案1】:

    因为类型擦除,ArrayList 在运行时并不知道它的泛型类型,所以它只能给你最通用的 Object[]。您需要使用the other toArray method,它允许您指定所需的数组类型。

    Integer[] array= stack.toArray(new Integer[stack.size()]);
    

    【讨论】:

      【解决方案2】:

      改为这样做:

      Integer[] array = stack.toArray(new Integer[stack.size()]);
      

      我们需要将“种子”数组作为参数传递给toArray 方法。

      【讨论】:

        【解决方案3】:

        方法是这样的:

        Integer[] array = stack.toArray(new Integer[stack.size()]);
        

        郑重声明,您的代码无法编译的原因不是只是类型擦除。问题是 List&lt;T&gt;.toArray() 返回一个 Object[] 并且它在引入泛型之前已经这样做了。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-02-16
          • 2017-04-03
          • 2022-09-30
          • 2010-09-06
          相关资源
          最近更新 更多