Nie jestem pewien, jak zaimplementować porównywalny interfejs do mojej klasy abstrakcyjnej. Mam następujący przykładowy kod, którego używam, aby go obejść:
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;
}
}
Mam klasę testową, która utworzy obiekty typu Animal, jednak chcę mieć porównywalny interfejs wewnątrz tej klasy, aby starsze lata odkryć były wyższe niż niskie. Nie mam jednak pojęcia, jak się do tego zabrać.
java
comparable
Softey
źródło
źródło
Comparable
. Zaimplementuj metodę, o której ci mówi, w sposób, który ci nakazuje.Odpowiedzi:
Musisz tylko to zdefiniować
Animal implements Comparable<Animal>
tjpublic class Animal implements Comparable<Animal>
. A potem musisz zaimplementowaćcompareTo(Animal other)
metodę tak, jak lubisz.Korzystając z tej implementacji
compareTo
, zwierzęta z wyższą pozycjąyear_discovered
zostaną zamówione wyżej. Mam nadzieję, że masz pomysłComparable
icompareTo
z tego przykładu.źródło
requires API 19
return ((Integer)this.level).compareTo(other.level);
Musisz:
implements Comparable<Animal>
do deklaracji klasy; iint compareTo( Animal a )
metodę wykonywania porównań.Lubię to:
źródło
Skoro już to robisz, proponuję przypomnieć sobie kilka kluczowych faktów na temat metod compareTo ()
CompareTo musi być spójny z metodą equals, np. Jeśli dwa obiekty są równe za pomocą equals (), funkcja CompareTo () musi zwracać zero, w przeciwnym razie, jeśli te obiekty są przechowywane w SortedSet lub SortedMap, nie będą się zachowywać poprawnie.
CompareTo () musi zgłosić wyjątek NullPointerException, jeśli bieżący obiekt zostanie porównany z obiektem null, w przeciwieństwie do equals (), które w takim scenariuszu zwracają false.
Czytaj więcej: http://javarevisited.blogspot.com/2011/11/how-to-override-compareto-method-in.html#ixzz4B4EMGha3
źródło
Zaimplementuj
Comparable<Animal>
interfejs w swojej klasie i zapewnij implementacjęint compareTo(Animal other)
metody w swojej klasie. Zobacz ten postźródło
Musisz zaimplementować interfejs i zdefiniować metodę compareTo (). Aby zapoznać się z dobrym samouczkiem, przejdź do - Link do samouczka lub MyKongLink
źródło
Możliwa alternatywa dla kodu źródłowego
Integer.compare
metody, która wymagaAPI Version 19
:public int compareTo(Animal other) { return Integer.valueOf(this.year_discovered).compareTo(other.year_discovered); }
Ta alternatywa nie wymaga użycia
API version 19
.źródło
Klasa Emp musi zaimplementować interfejs Comaparable, więc musimy zastąpić jej metodę compateTo.
źródło
Oto kod implementujący porównywalny interfejs java,
źródło
Użyj komparatora ...
źródło
Można to łatwo zrobić, implementując publiczną klasę, która implementuje Comparable. Umożliwi to użycie metody compareTo, której można użyć z dowolnym innym obiektem, z którym chcesz porównać.
na przykład możesz to zaimplementować w ten sposób:
Myślę, że to może rozwiązać twój cel.
źródło