Я не уверен, как реализовать сопоставимый интерфейс в моем абстрактном классе. У меня есть следующий пример кода, который я использую, чтобы попытаться обойти его:
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, однако я хочу иметь сопоставимый интерфейс внутри этого класса, чтобы более старые годы обнаружения были выше, чем низкие. Я даже не знаю, как это сделать.
Ответ 1
Вам просто нужно определить, что Animal implements Comparable<Animal>
i.e. 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
с помощью этого примера.
Ответ 2
Вам необходимо:
- Добавить
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);
}
}
Ответ 3
Пока вы в нем, я предлагаю вспомнить некоторые ключевые факты о методах compareTo()
-
CompareTo должен соответствовать методу equals, например. если два объекта равны через equals(), compareTo() должен возвращать ноль, если эти объекты хранятся в SortedSet или SortedMap, они не будут корректно вести себя.
-
CompareTo() должен выдавать исключение NullPointerException, если текущий объект сравнивается с нулевым объектом, а не equals(), который возвращает false в таком сценарии.
Подробнее: http://javarevisited.blogspot.com/2011/11/how-to-override-compareto-method-in.html#ixzz4B4EMGha3
Ответ 4
Внедрите интерфейс Comparable<Animal>
в свой класс и обеспечите реализацию метода int compareTo(Animal other)
в вашем классе. См. это сообщение
Ответ 5
Вам понадобится реализовать интерфейс и определить метод compareTo().
Для хорошего учебника перейдите по ссылке Ссылка на учебные пособия
или
MyKongLink
Ответ 6
Возможной альтернативой исходному коду метода Integer.compare
, который требует API Version 19
, является:
public int compareTo(Animal other) {
return Integer.valueOf(this.year_discovered).compareTo(other.year_discovered);
}
Эта альтернатива не требует использования API Version 19
.
Ответ 7
Класс 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);
}
}
}
Ответ 8
Используйте компаратор...
public class AnimalAgeComparator implements Comparator<Animal> {
@Override
public int compare(Animal a1, Animal a2) {
...
}
}
Ответ 9
Эта вещь легко может быть реализована путем реализации публичного класса, который реализует Comparable. Это позволит вам использовать метод compareTo, который можно использовать с любым другим объектом, с которым вы хотите сравнить.
Например, вы можете реализовать его следующим образом:
public String compareTo(Animal oth)
{
return String.compare(this.population, oth.population);
}
Я думаю, это может решить вашу цель.