首页 > 解决方案 > 泛型数组无法转换为可比较 Java 的对象

问题描述

我想在 Java 中创建一个接受泛型的类,但我还想强制使用泛型来实现Comparable接口。这是代码

public class MyClass<Item extends Comparable> {

private Item[] items;
private Item[] copies;

public MyClass(Item[] items) {
    this.items = items;
    copies=  (Item[])new Object[items.length];

    for (int i = 0; i < items.length; ++i) {
        copies[i] = items[i];
    }
}

public static void main(String[] args) {
    Integer[] items = {23, 36, 45, 66, 25, 38, 47};

    MyClass<Integer> myClass= new MyClass<Integer>(items);
   
   }
}

当我尝试运行代码时,出现以下错误:

java.lang.ClassCastException: class [Ljava.lang.Object; cannot be cast to 
class [Ljava.lang.Comparable; ([Ljava.lang.Object; and [Ljava.lang.Comparable;

我应该如何重构此代码以使其正常工作,同时强制它仅接受 Comparable Generics 并保留copies内部构造函数的实例化MyClass

标签: javagenericscasting

解决方案


创建一个Comparable数组而不是Object数组。

this.copies = (Item[]) new Comparable[items.length];

Demo


推荐阅读