首页 > Java > java教程 > Java 比较器错误:如何修复'比较方法违反其一般契约”?

Java 比较器错误:如何修复'比较方法违反其一般契约”?

Patricia Arquette
发布: 2024-12-14 10:07:12
原创
351 人浏览过

Java Comparator Error: How to Fix

Java 错误:揭示违反比较方法的一般契约

定义比较器时会出现“比较方法违反其一般契约”错误Java 未能遵守传递性的基本原则。该原则规定,如果对象 A 大于对象 B,并且对象 B 大于对象 C,则 A 也必须大于 C。

要解决此错误,至关重要的是确保定义的比较器严格遵循此规则。在提供的示例中,问题出在compareTo() 方法中。几个明显的差异:

  1. 比较卡牌稀有度时,当card1.getRarity()大于card2.getRarity()时,该方法不会返回-1。
  2. 比较卡牌时ID,如果 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板