我不确定如何在我的抽象类中实现类似的接口。我有以下示例代码,我尝试使用它来解决它:
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类型的对象,但是我希望在这个类中有一个类似的接口,这样老年的发现排名高于低。我不知道如何解决这个问题。
答案 0 :(得分:144)
您只需定义Animal implements Comparable<Animal>
即public class Animal implements Comparable<Animal>
即可。然后你必须以你喜欢的方式实现compareTo(Animal other)
方法。
@Override
public int compareTo(Animal other) {
return Integer.compare(this.year_discovered, other.year_discovered);
}
使用compareTo
的此实施方式,year_discovered
更高的动物将获得更高的排序。我希望您通过此示例了解Comparable
和compareTo
。
答案 1 :(得分: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);
}
}
答案 2 :(得分:5)
当你参与其中时,我建议记住一些关于compareTo()方法的重要事实
CompareTo必须与equals方法一致,例如如果两个对象通过equals()相等,则compareTo()必须返回零,否则如果这些对象存储在SortedSet或SortedMap中,它们将无法正常运行。
如果将当前对象与null对象进行比较而不是在这种情况下返回false的equals(),则CompareTo()必须抛出NullPointerException。
了解详情:http://javarevisited.blogspot.com/2011/11/how-to-override-compareto-method-in.html#ixzz4B4EMGha3
答案 3 :(得分:1)
在您的班级中实施Comparable<Animal>
界面,并在您的班级中提供int compareTo(Animal other)
方法的实施。See This Post
答案 4 :(得分:1)
您需要实现接口并定义compareTo()方法。 如需一个好的教程,请转到 - Tutorials point link 要么 MyKongLink
答案 5 :(得分:0)
需要Integer.compare
的{{1}}方法源代码的可能替代方法是:
API Version 19
此替代 要求您使用public int compareTo(Animal other) {
return Integer.valueOf(this.year_discovered).compareTo(other.year_discovered);
}
。
答案 6 :(得分:0)
Emp类需要实现Comaparable接口,因此我们需要覆盖其compateTo方法。
import java.util.ArrayList;
import java.util.Collections;
class Emp implements Comparable< Emp >{
int empid;
String name;
Emp(int empid,String name){
this.empid = empid;
this.name = name;
}
@Override
public String toString(){
return empid+" "+name;
}
@Override
public int compareTo(Emp o) {
if(this.empid==o.empid){
return 0;
}
else if(this.empid < o.empid){
return 1;
}
else{
return -1;
}
}
}
public class JavaApplication1 {
public static void main(String[] args) {
ArrayList<Emp> a= new ArrayList<Emp>();
a.add(new Emp(10,"Mahadev"));
a.add(new Emp(50,"Ashish"));
a.add(new Emp(40,"Amit"));
Collections.sort(a);
for(Emp id:a){
System.out.println(id);
}
}
}
答案 7 :(得分:0)
这里是实现java可比接口的代码,
// adding implements comparable to class declaration
public class Animal implements Comparable<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;
}
@Override
public int compareTo(Animal other) // compareTo method performs the comparisons
{
return Integer.compare(this.year_discovered, other.year_discovered);
}
}
答案 8 :(得分:-1)
使用比较器......
public class AnimalAgeComparator implements Comparator<Animal> {
@Override
public int compare(Animal a1, Animal a2) {
...
}
}
答案 9 :(得分:-5)
通过实现实现Comparable的公共类可以很容易地完成这件事。这将允许您使用compareTo方法,该方法可以与您要比较的任何其他对象一起使用。
例如,你可以用这种方式实现它:public String compareTo(Animal oth)
{
return String.compare(this.population, oth.population);
}
我认为这可能会解决你的目的。