我需要在子类中覆盖CompareTo方法

时间:2019-03-29 18:08:23

标签: java generics comparable

我有一个实现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”)

3 个答案:

答案 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的构造函数