我有一个狗和猫类看起来像这样:
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()方法已经包含这些决定吗?
答案 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);
}
}