Java-Fehler: Offenlegung der Verletzung des allgemeinen Vertrags der Vergleichsmethode
Der Fehler „Vergleichsmethode verletzt ihren allgemeinen Vertrag“ tritt auf, wenn ein Komparator definiert wird in Java hält sich nicht an das Grundprinzip der Transitivität. Dieses Prinzip schreibt vor, dass, wenn Objekt A größer als Objekt B ist und Objekt B größer als Objekt C ist, A auch größer als C sein muss.
Um diesen Fehler zu beheben, muss unbedingt sichergestellt werden, dass das definierte Der Vergleicher folgt dieser Regel strikt. Im bereitgestellten Beispiel liegt das Problem in der Methode „compareTo()“. Es sind mehrere Unstimmigkeiten erkennbar:
Um diese Fehler zu beheben, wird eine überarbeitete Version des Komparators vorgestellt:
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! }
Dieser aktualisierte Komparator stellt sicher, dass die Vergleichsmethode der Transitivitätsregel entspricht. Durch die Behebung dieser Inkonsistenzen wird der Fehler „Vergleichsmethode verstößt gegen ihren allgemeinen Vertrag“ behoben.
Das obige ist der detaillierte Inhalt vonJava-Komparatorfehler: Wie behebt man „Vergleichsmethode verstößt gegen ihren allgemeinen Vertrag'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!