在自定义Java类中重写compareTo()方法



我有一个狗和猫类,看起来像这样:

public class Dog implements Speakable
{
private String name;
public Dog(String name)
{
    this.name = name;
}
public void speak()
{
    System.out.println("Woof! Woof!");
}
public String toString()
{
    return "Dog: " + name;
}
}

这些类都实现了我创建的一个名为Speakable的接口,它看起来像这样:

public interface Speakable
{
  public void speak();
}

这个Speakable接口的存在是因为我需要一个引用变量,允许我将Dogs和Cats添加到同一个ArrayList中,并且仍然对它们调用speak()方法。

我还需要重写Comparable接口的compareTo()方法,这样我就可以比较狗的名字。当调用这个方法时,我认为我的代码看起来像这样:a.compareTo(b)。如果a大于b,我希望这个新方法返回-1,如果a小于b,返回1,如果它们相等,返回0。

我认为除了Speakable之外,我还需要Dog类来具体实现Comparable,所以我编写的Comparable接口是这样的:

public interface Comparable<Dog>
{
    public int compareTo(Object obj);
}

我如何重写compareTo()方法来满足我上面列出的需求?我知道我将需要几个if语句,但是我想不出一种不调用新的compareTo()方法中的compareTo()方法来编写这个语句的方法。这合法吗?来自可比接口的compareTo()方法不应该已经包含这些决策吗?

删除您的自定义Comparable,并使用Java Comparable<T>。你可以用Speakable来扩展Comparable。类似的,

public interface Speakable extends Comparable<Speakable>

那么每个Speakable也是一个Comparable<Speakable>

Dog类中使用Java可比接口。像这样:

public class Dog implements Speakable, Comparable<Dog>{
    @Override
    public int compareTo(Dog o) {
        return this.name.compareTo(o.name);
    }

}

最新更新