Je ne sais pas comment implémenter une interface comparable dans ma classe abstraite. J'ai l'exemple de code suivant que j'utilise pour essayer de comprendre:
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;
}
}
J'ai une classe de test qui créera des objets de type Animal, mais je souhaite disposer d'une interface comparable à l'intérieur de cette classe afin que les années de découverte les plus anciennes occupent un rang supérieur à faible. Je n'ai cependant aucune idée de la façon de s'y prendre.
Vous devez simplement définir ce Animal implements Comparable<Animal>
c'est-à-dire public class Animal implements Comparable<Animal>
. Et ensuite, vous devez implémenter la méthode compareTo(Animal other)
de cette façon.
@Override
public int compareTo(Animal other) {
return Integer.compare(this.year_discovered, other.year_discovered);
}
En utilisant cette implémentation de compareTo
, les animaux avec un year_discovered
supérieur seront classés plus haut. J'espère que vous aurez l'idée de Comparable
et compareTo
avec cet exemple.
Tu dois:
implements Comparable<Animal>
à la déclaration de classe; etint compareTo( Animal a )
pour effectuer les comparaisons.Comme ç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);
}
}
Pendant que vous y êtes, je suggère de rappeler quelques faits essentiels sur les méthodes compareTo ()
CompareTo doit être conforme à la méthode equals, par ex. si deux objets sont égaux via equals (), compareTo () doit renvoyer zéro, sinon si ces objets sont stockés dans SortedSet ou SortedMap, ils ne se comporteront pas correctement.
CompareTo () doit générer une exception NullPointerException si l'objet actuel est comparé à un objet null, par opposition à equals (), qui renvoie la valeur false dans un tel scénario.
En savoir plus: http://javarevisited.blogspot.com/2011/11/how-to-override-compareto-method-in.html#ixzz4B4EMGha3
Implémentez l'interface Comparable<Animal>
dans votre classe et implémentez la méthode int compareTo(Animal other)
dans votre classe. Voir cet article
Vous devez implémenter l'interface et définir la méthode compareTo () . Pour un bon tutoriel, allez à - Tutorials point link Ou MyKongLink
Une alternative possible du code source de la méthode Integer.compare
qui nécessite API Version 19
est la suivante:
public int compareTo(Animal other) {
return Integer.valueOf(this.year_discovered).compareTo(other.year_discovered);
}
Cette alternative ne nécessite pas vous oblige à utiliser API version 19
.
Voici le code pour implémenter une interface comparable à 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);
}
}