覆盖自定义Java类中的compareTo()方法?

时间:2015-10-08 14:23:28

标签: java arraylist interface 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()方法已经包含这些决定吗?

2 个答案:

答案 0 :(得分:3)

删除自定义Comparable,然后使用Java Comparable<T>。您可以将Speakable修改为extend Comparable。像,

public interface Speakable extends Comparable<Speakable>

然后每个Speakable也是Comparable<Speakable>

答案 1 :(得分:2)

Dog 类中使用Java Comparable接口。像这样的Somenthing:

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

}

相关问题