Java 錯誤:揭示違反比較方法的一般契約
定義比較器時會出現「比較方法違反其一般契約」錯誤Java未能遵守傳遞性的基本原則。此原則規定,如果物件 A 大於物件 B,且物件 B 大於物件 C,則 A 也必須大於 C。
要解決此錯誤,至關重要的是確保定義的比較器嚴格遵循此規則。在提供的範例中,問題出在compareTo() 方法中。幾個明顯的差異:
為了糾正這些錯誤,提出了比較器的修訂版本:
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! }
此更新的比較器確保比較方法遵守傳遞性規則。透過解決這些不一致問題,「比較方法違反其一般契約」錯誤將得到解決。
以上是Java 比較器錯誤:如何修復「比較方法違反其一般契約」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!