Erreur Java : "La méthode de comparaison viole son contrat général"
Lors du tri des collections, Java utilise une méthode de comparaison pour établir l'ordre des objets. Cependant, cette méthode doit respecter le principe de transitivité, qui stipule que si l'objet A est supérieur à B et que B est supérieur à C, alors A doit être supérieur à C. Dans certaines circonstances, ce contrat peut être violé, conduisant à la " La méthode de comparaison viole son erreur de contrat général.
Exemple
Considérons le comparateur personnalisé suivant, destiné à trier les objets en fonction de critères spécifiques. critères. Cependant, en raison d'incohérences logiques, il viole la règle de transitivité :
@Override public int compareTo(Object o) { ... if (card1.getRarity() < card2.getRarity()) { return 1; } ... if (card1.getSet() > card2.getSet()) { return -1; } ... }
Problème de transitivité
Dans l'exemple ci-dessus, si card1.getRarity() est le facteur décisif facteur et card1.getRarity() est inférieur à card2.getRarity(), le comparateur renvoie correctement 1. Cependant, si card2.getSet() est le facteur décisif et card2.getSet() est inférieur à card1.getSet(), le comparateur renvoie incorrectement -1. Il en résulte une situation non transitive.
Solution correcte
Pour assurer la transitivité, le comparateur doit adhérer à la logique suivante :
if (card1.getRarity() < card2.getRarity()) { return 1; } if (card1.getRarity() > card2.getRarity()) { return -1; } ...
En résumé, pour éviter l'erreur « La méthode de comparaison viole son contrat général », assurez-vous que votre méthode de comparaison adhère au principe de transitivité. Cette règle veut que si l'objet A est supérieur à B et que B est supérieur à C, alors A doit être supérieur à C. En assurant la transitivité, vous garantissez un comportement de tri cohérent et correct.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!