如何实现Java可比接口?

如何实现Java可比接口?,java,comparable,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

我不知道如何在我的抽象类中实现一个类似的接口。我有下面的示例代码,我正在使用它来尝试并了解它:

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;
    }
}

我有一个测试类,它将创建类型为Animal的对象,但是我希望在这个类中有一个可比较的接口,以便旧的发现年份排名高于低。但是我不知道该怎么做。

实现<代码>可比

实现<代码>可比

你只需要定义
动物实现可比
,即
公共类动物实现可比
。然后你必须以你喜欢的方式实现
compareTo(animalother)
方法

@Override
public int compareTo(Animal other) {
    return Integer.compare(this.year_discovered, other.year_discovered);
}

使用这种
比较的实现
,发现的
年数更高的动物将得到更高的排序。我希望你能通过这个例子理解
Comparable
compareTo

你只需要定义
动物工具Comparable
,即
公共类动物工具Comparable
。然后你必须以你喜欢的方式实现
compareTo(animalother)
方法

@Override
public int compareTo(Animal other) {
    return Integer.compare(this.year_discovered, other.year_discovered);
}

使用这种
比较的实现
,发现的
年数更高的动物将得到更高的排序。我希望通过这个示例,您能够理解
Comparable
compareTo

您需要实现接口并定义compareTo()方法。 要获得好的教程,请访问- 或
您需要实现接口并定义compareTo()方法。 要获得好的教程,请访问- 或 使用比较器

    public class AnimalAgeComparator implements Comparator<Animal> {

@Override
public int compare(Animal a1, Animal a2) {
  ...
}
}
公共类AnimalAgeComparator实现Comparator{
@凌驾
公共整数比较(动物a1、动物a2){
...
}
}
使用比较器

    public class AnimalAgeComparator implements Comparator<Animal> {

@Override
public int compare(Animal a1, Animal a2) {
  ...
}
}
公共类AnimalAgeComparator实现Comparator{
@凌驾
公共整数比较(动物a1、动物a2){
...
}
}
您需要:

  • 在类声明中添加
    实现可比较的
    ;及
  • 执行
    int compareTo(动物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);
    }
}
公共类动物工具{
公共字符串名称;
发现的公共int年;
公共字符串人口;
公共动物(字符串名称、发现年份、字符串种群){
this.name=名称;
this.year\u discovered=year\u discovered;
这个。人口=人口;
}
公共字符串toString(){
String s=“动物名称:”+name+”\n动物发现:“+year\u Discovered+”\n种群:“+population;
返回s;
}
@凌驾
公共内部比较(最终动物o){
返回整数。比较(this.year\u discovered,o.year\u discovered);
}
}
您需要:

  • 在类声明中添加
    实现可比较的
    ;及
  • 执行
    int compareTo(动物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);
    }
}
公共类动物工具{
公共字符串名称;
发现的公共int年;
公共字符串人口;
公共动物(字符串名称、发现年份、字符串种群){
this.name=名称;
this.year\u discovered=year\u discovered;
这个。人口=人口;
}
公共字符串toString(){
String s=“动物名称:”+name+”\n动物发现:“+year\u Discovered+”\n种群:“+population;
返回s;
}
@凌驾
公共内部比较(最终动物o){
返回整数。比较(this.year\u discovered,o.year\u discovered);
}
}

这件事可以通过实现一个实现Comparable的公共类来轻松完成。这将允许您使用compareTo方法,该方法可用于您希望比较的任何其他对象

例如,您可以通过以下方式实现:

public String compareTo(Animal oth) 
{
    return String.compare(this.population, oth.population);
}

我认为这可能会解决您的问题。

通过实现一个实现Comparable的公共类,可以轻松实现这一点。这将允许您使用compareTo方法,该方法可用于您希望比较的任何其他对象

例如,您可以通过以下方式实现:

public String compareTo(Animal oth) 
{
    return String.compare(this.population, oth.population);
}

我认为这可能会解决您的问题。

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

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

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


  • 阅读更多内容:

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

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

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


  • 阅读更多信息:

    整数源代码中可能的替代方法。比较需要API版本19
    的方法是:

    公共内部比较(动物其他){
    返回Integer.valueOf(发现的本年)。compareTo(发现的其他年);
    }


    此备选方案要求您使用
    API版本19

    整数源代码中的可能备选方案。比较需要
    API版本19
    方法是:

    公共内部比较(动物其他){
    返回Integer.valueOf(this.year\u discovered).compareTo(other.ye