我正在尝试将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[] arr
会Comparable[] arr
。所以
T[] arr = (T[]) new Object[5];
会变成
Comparable[] arr = (Comparable[]) new Object[5];
显然,它将抛出java.lang.ClassCastException
。
添加回答
举报
0/150
提交
取消