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 中国語 Web サイトの他の関連記事を参照してください。