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

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


慕桂英3389331
浏览 175回答 1
1回答

繁花不似锦

您需要使用:arr&nbsp;=&nbsp;(T[])&nbsp;new&nbsp;Comparable[5];代替arr&nbsp;=&nbsp;(T[])&nbsp;new&nbsp;Object[5];作为类型擦除后T[] arr会Comparable[] arr。所以T[]&nbsp;arr&nbsp;=&nbsp;(T[])&nbsp;new&nbsp;Object[5];会变成Comparable[]&nbsp;arr&nbsp;=&nbsp;(Comparable[])&nbsp;new&nbsp;Object[5];显然,它将抛出java.lang.ClassCastException。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java