Je travaille sur un programme qui doit remplacer CompareTo () dans Comparable pour que Collections.sort () fonctionne. Car je travaille avec une ArrayList composée d'assistants, que je dois trier en fonction du nom.
J'ai parcouru le forum et j'ai trouvé cela et essayé de changer
public int compareTo(Object o2){
à
@Override public int compareTo(Object o2){ Assistant m2 = (Assistant) o2; if(this.name.compareTo(m2.name) == 0){ return 0; }else if(this.name.compareTo(m2.name)<0){ return -1; }else{ return 1; } }
qui en retour me permet d'utiliser Collections.sort () dans une autre classe et ne me prévient d'aucune erreur, cependant, deux nouvelles erreurs apparaître.
Pour commencer, dans cette même ligne
public class Assistant implements Comparable<Assistant>{
il me dit que "ce n'est pas abstrait et ne remplace pas compareTo (Assistant) dans Comparable. " Et quand je vais au compareTo (), j'ai créé:
public class Assistant implements Comparable<Assistant>{
(Le constructeur de l'assistant n'a qu'un nom).
Cependant, à cet endroit, j'ai une erreur dans @Override: "La méthode ne remplace ni n'implémente une méthode d'un supertype".
Et dans la ligne suivante
public class Assistant{
j'obtiens une autre erreur (qui est liée à la dernière) me disant: "Conflit de noms: compareTo (objet) dans l'Assistant et compareTo (Assistant) dans Assistant ont le même effacement, mais aucun des deux ne remplace l'autre."
Je comprends en quelque sorte le problème, je ne remplace pas le compareTo d'origine ().
Je suis un débutant en java, donc si quelqu'un trouve le problème, je vous serais reconnaissant si vous pouviez également expliquer ce que je fais mal (ou ce que je manque).
Merci :)
4 Réponses :
Puisque vous implémentez Comparable, votre méthode compareTo () nécessite un paramètre de type Assistent.
Donc, utiliser ceci devrait fonctionner:
@Override public int compareTo(Assistent m2) { if(this.name.compareTo(m2.name) == 0){ return 0; }else if(this.name.compareTo(m2.name)<0){ return -1; }else{ return 1; } }
C'est parce que vous avez paramétré Comparable
(le paramètre de type est Assistant
). Cela devrait le faire (je l'ai un peu simplifié):
@Override public int compareTo(Assistant o){ return this.name.compareTo(o.name); }
Ceci parce que pour avoir Comparable de type Assistant
Changer
public int compareTo(Assistant o2)
En,
public int compareTo(Object o2)
Aux exemples déjà correctement indiqués sur la façon dont l'implémentation se compilerait, j'ajouterai quelques règles à retenir en ce qui concerne les méthodes de remplacement:
Le numéro 4 explique pourquoi vous devez changer le type de paramètre d'objet en assistant pour qu'il remplace avec succès la méthode compareTo ().