Comparable 接口的问题重写方法

Problem Overriding method from Comparable Interface

我有一个名为 Individuo 的抽象 class,它实现了 Comparable<Individuo> 接口。 然而,当我尝试覆盖 child classes 中的方法时,它实现了以下方法:

@Override
public int compareTo(Object o) {
    return 0;
}

它不应该实现以下内容吗?

@Override
public int compareTo(Individuo o) {
    return 0;
}

这是声明

个人:

public abstract class Individuo<I extends Individuo> implements Cloneable, Comparable<Individuo>

Individuo_MultiOOP (child):

public class Individuo_MultiOOP extends Individuo implements Cloneable

编辑 2(问题更新后)

因为 Individuo 是用通用类型声明的,所以使用 Comparable<Individuo<I>>
代替 Comparable<Individuo> 在声明中。

原回答
首先用实现声明保存 class 而不覆盖 compareTo() -

public class IndividuoChild extends Individuo {
...
}

然后从编译器错误注释[可以在像 eclipse、intellij 这样的 IDE 中找到],select"Add unimplemented methods" 这将生成预期的 compareTo() 作为-

@Override
public int compareTo(Individuo o) {
    // TODO Auto-generated method stub
    return 0;
}

不,您应该使用相同的参数覆盖。它将更具可读性和易于理解。

class Individuo implements Comparable<Individuo>{
    @Override
    public int compareTo(Individuo o) {
        return 0;
    }
}

Child class

public class Child extends Individuo{
    @Override
    public int compareTo(Individuo o) {
        // TODO Auto-generated method stub
        return 0;
    }
}

如果使用Object,设计可能有问题。

很可能 children 扩展了 Individuo 的原始版本,后者已被一些论点概括。

在这种情况下,children中的compareTo(Object o)将编译:

abstract class Individuo<T> implements Comparable<Individuo<T>> {}

class Child extends Individuo {
    @Override
    public int compareTo(Object o) {
        return 0;
    }
}

确保 children 使用提供的所有通用参数扩展正确的 Individuo

class Child extends Individuo<Child> {
    @Override
    public int compareTo(Object o) { // this shouldn't compile
        return 0;
    }
}
@Override
public int compareTo(Individuo o) {
    return 0;
}

如果您指定了通用类型,则这是需要重写的方法。我的意思是当你的 class 签名是:

public class Individuo implements Comparable < Individuo >

但如果您没有指定可比较接口的通用类型,则可以覆盖 public int compareTo(Object o) 方法。我的意思是如果你的 class 签名是:

public class Individuo implements Comparable

兄弟,如果你的问题得到解决,请告诉我