Erreur Java : dévoilement de la violation du contrat général de la méthode de comparaison
L'erreur "La méthode de comparaison viole son contrat général" se produit lorsqu'un comparateur est défini en Java ne parvient pas à adhérer au principe fondamental de transitivité. Ce principe veut que si l'objet A est supérieur à l'objet B et que l'objet B est supérieur à l'objet C, alors A doit également être supérieur à C.
Pour résoudre cette erreur, il est crucial de s'assurer que l'objet défini le comparateur suit strictement cette règle. Dans l'exemple fourni, le problème réside dans la méthode compareTo(). Plusieurs divergences sont évidentes :
Pour rectifier ces erreurs, une version révisée du comparateur est présentée :
public int compareTo(Object o) { if (this == o) { return 0; } CollectionItem item = (CollectionItem) o; Card card1 = CardCache.getInstance().getCard(cardId); Card card2 = CardCache.getInstance().getCard(item.getCardId()); if (card1.getSet() > card2.getSet()) { return 1; } if (card1.getSet() < card2.getSet()) { return -1; } if (card1.getRarity() < card2.getRarity()) { return 1; } if (card1.getRarity() > card2.getRarity()) { return -1; } if (card1.getId() > card2.getId()) { return 1; } if (card1.getId() < card2.getId()) { return -1; } return cardType - item.getCardType(); //watch out for overflow! }
Ce comparateur mis à jour garantit que la méthode de comparaison respecte la règle de transitivité. En corrigeant ces incohérences, l'erreur « La méthode de comparaison viole son contrat général » sera résolue.
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!