多态数组排序中的强制转换错误



我研究了很多线程,但没有一个讨论过这个问题。我有一个包含2个子类的超级抽象类,我创建了一个大小为10的多态数组,其中存储了5个对象。然而,当我尝试对它进行排序时,会出现一个错误,指示如下:Exception in thread "main" java.lang.ClassCastException: class Sale cannot be cast to class java.lang.Comparable我已经正确地实现了Comparable接口和ComapreTo方法。我也尝试过使用数组列表和Collections.Sort,但没有任何变化。这是我的示例代码:

public abstract class Animal implements Comparable<Animal> {
protected String name;
@Override
public int compareTo(Animal v1) {
return this.name.compareTo(v1.name);
}
@Override
public String toString() {
return name;
}
}
public class Cat extends Animal {
public Cat(String name) {
this.name = name;
}
}
public class Chicken extends Animal {
public Chicken(String name) {
this.name = name;
}
}
public static void main(String[] args) {
Animal[] animalArray = new Animal[10];
animalArray[0] = new Cat("Winstron");
animalArray[1] = new Chicken("Hello");
animalArray[2] = new Chicken("Manan");
animalArray[3] = new Cat("Anything");
animalArray[4] = new Cat("JustString");
for (int i = 0; i < animalArray.length; i++) {
if (animalArray[i] != null) {
System.out.println(animalArray[i].toString());
}
}
System.out.println("");

Arrays.sort(animalArray, 0, 5);

for (int i = 0; i < animalArray.length; i++) {
if (animalArray[i] != null) {
System.out.println(animalArray[i].toString());
}
}
}

这只是一个示例,出于某种原因,它工作得很好,但在我的主代码中,它只是不断告诉我的任何一个子类都不能转换为可比较的。

Sale没有实现Comparable接口。这意味着它没有用Comparable扩展类,也没有实现接口。

所以,我知道这很令人困惑,但我的界面与这里提供的示例完全相同。此外,事实证明,我所需要的只是创建一个新项目,并将我的源代码复制到其中。这使我的程序运行得非常完美。

最新更新