如何实现Java可比接口?

Sof*_*tey 96 java comparable

我不确定如何在我的抽象类中实现类似的接口.我有以下示例代码,我正在尝试并解决它:

public class Animal{
    public String name;
    public int yearDiscovered;
    public String population;

    public Animal(String name, int yearDiscovered, String population){
        this.name = name;
        this.yearDiscovered = yearDiscovered;
        this.population = population; }

    public String toString(){
        String s = "Animal name: "+ name+"\nYear Discovered: "+yearDiscovered+"\nPopulation: "+population;
        return s;
    }
}
Run Code Online (Sandbox Code Playgroud)

我有一个测试类,它将创建Animal类型的对象,但是我希望在这个类中有一个类似的接口,以便旧年的发现排名高于低.我不知道如何解决这个问题.

use*_*983 149

你只需要定义即Animal implements Comparable<Animal>ie public class Animal implements Comparable<Animal>.然后你必须以compareTo(Animal other)你喜欢的方式实现该方法.

@Override
public int compareTo(Animal other) {
    return Integer.compare(this.year_discovered, other.year_discovered);
}
Run Code Online (Sandbox Code Playgroud)

使用这种实施方式compareTo,具有更高的动物year_discovered将被命令更高.我希望你的想法ComparablecompareTo这个例子.

  • 在Android中,它需要API 19` (2认同)

MT0*_*MT0 34

你需要:

  • 添加implements Comparable<Animal>到类声明; 和
  • 实现一种int compareTo( Animal a )方法来执行比较.

像这样:

public class Animal implements Comparable<Animal>{
    public String name;
    public int year_discovered; 
    public String population; 

    public Animal(String name, int year_discovered, String population){
        this.name = name;
        this.year_discovered = year_discovered;
        this.population = population;
    }

    public String toString(){
     String s = "Animal name: "+ name+"\nYear Discovered: "+year_discovered+"\nPopulation: "+population;
     return s;
    }

    @Override
    public int compareTo( final Animal o) {
        return Integer.compare(this.year_discovered, o.year_discovered);
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 5

当您在其中时,我建议您记住有关compareTo()方法的一些关键事实

  1. CompareTo必须与equals方法一致,例如,如果两个对象通过equals()相等,则compareTo()必须返回零,否则,如果这些对象存储在SortedSet或SortedMap中,它们将无法正常工作。

  2. 如果将当前对象与空对象进行比较,而equals()在这种情况下返回false,则CompareTo()必须抛出NullPointerException。

了解更多:http : //javarevisited.blogspot.com/2011/11/how-to-override-compareto-method-in.html#ixzz4B4EMGha3