我正在尝试将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;
}
我每次运行它都会收到以下编译错误
线程“ main”中的异常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?我已经尝试过了,但是它似乎不适用于这样的数组!
答案 0 :(得分:1)
您需要使用:
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
。