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

时间:2018-06-26 15:54:02

标签: java arrays casting

我正在尝试将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?我已经尝试过了,但是它似乎不适用于这样的数组!

1 个答案:

答案 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