我有一个实现Comparable接口的类A,还有一个扩展了A的类B。我需要找到一种方法来覆盖类B中的const players = teams.flatMap(
team => team.players.map(player => {...player, team: team.team})
);
。
我发现了类似的问题 Cannot use comparable with father-son-grandson inheritance 并尝试实施提供的解决方案
A级
compareTo
B类:
public class A<E extends A> implements Comparable<E>{
String surname;
int age;
A(String surname, int age){
this.surname = surname;
this.age = age;
}
public int compareTo(E o) {
int res=0;
res =this.surname.compareTo(o.surname);
if(res==0)
res = this.age-o.age;
return res;
}
例外:
线程“ main”中的异常java.lang.ClassCastException:类T4.A 不能转换为T4.B类(T4.A和T4.B在以下模块的未命名模块中) 加载程序“ app”)
答案 0 :(得分:1)
您可以发布失败的代码吗?
我只是在自己的机器上尝试过,它似乎可以工作。我唯一可以重新创建错误的地方是使用以下代码:b.compareTo((B) a);
由于您无法将父类型转换为子类型,因此无法使用。
此外,我认为这只是一个复制错误,但是您在提供的代码中缺少方括号,并且类B的构造函数与类名不匹配。
答案 1 :(得分:0)
您在类B
中的方法应这样写:
@Override
public int compareTo(B o){
int res=0;
res =this.surname.compareTo(o.surname);
if(res==0)
res = this.age-o.age;
if(res ==0){
res= this.num-o.num;
}
return res;
}
答案 2 :(得分:0)
学生!= B
B类需要一个名为B的构造函数