ホームページ > Java > &#&チュートリアル > Java コンパレータ エラー:「比較メソッドが一般規約に違反しています」を修正する方法

Java コンパレータ エラー:「比較メソッドが一般規約に違反しています」を修正する方法

Patricia Arquette
リリース: 2024-12-14 10:07:12
オリジナル
352 人が閲覧しました

Java Comparator Error: How to Fix

Java エラー: 比較メソッドの一般規約違反の暴露

コンパレーターが定義されている場合、「比較メソッドは一般規約に違反しています」エラーが発生しますJava では推移性の基本原則が守られていません。この原則は、オブジェクト A がオブジェクト B より大きく、オブジェクト B がオブジェクト C より大きい場合、A も C より大きい必要があることを示しています。

このエラーを解決するには、定義されたコンパレータはこの規則に厳密に従います。示されている例では、問題は CompareTo() メソッド内にあります。いくつかの矛盾が明らかです:

  1. カードのレア度を比較する場合、card1.getRarity() がcard2.getRarity() より大きい場合、メソッドは -1 を返しません。
  2. カードを比較する場合ID が等しくない場合、メソッドは、大きい方に基づいて -1 または 1 を返す必要があるにもかかわらず、-1 を返します。 ID.

これらのエラーを修正するために、コンパレータの改訂版が提供されています。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート