【问题标题】:ClassCastException When converting Collection to array [duplicate]将集合转换为数组时出现 ClassCastException [重复]
【发布时间】:2018-09-25 05:40:18
【问题描述】:

对于我的一个项目,我正在尝试将给定的 Collection 转换为数组

我目前有这个:

public class InsertionSorter< T extends Comparable<T>> {
    private T[] array;

    @SuppressWarnings("unchecked")
    public InsertionSorter(){
        array = (T[]) new Object[0];
    }
}

这给了我以下错误:

java.lang.ClassCastException: java.base/[Ljava.lang.Object; cannot be cast to java.base/[Ljava.lang.Comparable;

有解决办法吗?

在将其转换为数组后,我想对其进行排序并将其作为集合返回。我这样做如下:

collection.clear();
collection.addAll(Arrays.asList(sort(array)));
return collection;

sort方法是一种对数组进行排序并返回T类型数组的方法。

【问题讨论】:

  • 你想达到什么目的?你明白 Object 与数组不同吗?为什么不用对象数组而不是 T?
  • 本质上我想将 T 类型的集合转换为 T 类型的数组
  • 在这种情况下使用对象数组... T 只是提供编译类型安全性而不是运行时...
  • @SMA,对象数组不行。您将无法在数组中的项目上调用 compareTo()
  • 抱歉,没有具体说明。将其更改为数组后,我想在对数组进行排序后再次将其作为集合返回。我会稍微修改一下帖子。

标签: java arrays generics collections


【解决方案1】:

您的类型定义T 声称实例至少为Comparable,但随后您尝试分配Object 的数组,这不是 Comparable,从而导致ClassCastException.

【讨论】:

  • 这可能会提供关于为什么会发生异常但没有解决方案的答案
猜你喜欢
  • 1970-01-01
  • 2018-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多