为了账号安全,请及时绑定邮箱和手机立即绑定

扩展可比的Java通用类不能转换为java.base / [Ljava.lang

扩展可比的Java通用类不能转换为java.base / [Ljava.lang

慕桂英3389331 2021-04-16 14:16:57
我正在尝试将Object []数组强制转换为通用排序,我已经实现了这部分代码public class SortedArraySet<T extends Comparable<T>> implements Set<T>, Comparator<T> {    T[] arr;    int size = 5, index = 0;    @SuppressWarnings("unchecked")    SortedArraySet() {        arr = (T[]) new Object[5];        System.out.println("New set was initiated");    }    @Override    public int compare(T a, T b) {        if (a.compareTo(b) > 0)            return 1;        else            return 0;    }每当我运行它时,我都会收到以下编译错误线程“主”中的异常java.lang.ClassCastException:java.base / [Ljava.lang.Object; 无法转换为java.base / [Ljava.lang.Comparable; 在q3.SortedArraySet。(SortedArraySet.java:12)在q3.q3main.main(q3main.java:6)在第6行中说明如下SortedArraySet<Integer> sa = new SortedArraySet<Integer>();在添加扩展Comparable(和compareTo)以便对集合进行排序之前,使用该代码可以正常工作并且可以使用Collections.sort吗?我已经尝试过了,但它似乎不适用于这样的数组!
查看完整描述

1 回答

?
繁花不似锦

TA贡献1851条经验 获得超4个赞

您需要使用:

arr = (T[]) new Comparable[5];

代替

arr = (T[]) new Object[5];

作为类型擦除后T[] arrComparable[] arr。所以

T[] arr = (T[]) new Object[5];

会变成

Comparable[] arr = (Comparable[]) new Object[5];

显然,它将抛出java.lang.ClassCastException


查看完整回答
反对 回复 2021-04-28
  • 1 回答
  • 0 关注
  • 174 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信