比较方法违反了它的一般契约!仅限 Java 7

2023-12-11

我知道这个问题已经有一段时间了,并检查了我之前能得到的所有答案,但这个仍然不起作用。

对象“crew”代表具有等级和其他项目的船员。应通过比较 int 值“signed_rank”来进行比较,如果两个实例中该值相等,则布尔值“is_trainer”应该产生差异。

只要使用 java

java.lang.IllegalArgumentException: Comparison method violates its general contract!
at java.util.ComparableTimSort.mergeLo(ComparableTimSort.java:714)
at java.util.ComparableTimSort.mergeAt(ComparableTimSort.java:451)
at java.util.ComparableTimSort.mergeCollapse(ComparableTimSort.java:376)
at java.util.ComparableTimSort.sort(ComparableTimSort.java:182)
at java.util.ComparableTimSort.sort(ComparableTimSort.java:146)
at java.util.Arrays.sort(Arrays.java:472)
at java.util.Collections.sort(Collections.java:155)
at dormas_flightlog.Query.getCrew(Query.java:714)

这是来源,其中一些潜在危险的部分已经被注释掉,但它仍然不起作用:

public class crew implements Serializable, Comparable<crew> {

private static final long serialVersionUID = 36L;
private int flightID = 0;
private int assigned_rank = 25;
private boolean is_trainer = false;
...


@Override
public int compareTo(crew him) {

    int myRank = this.getAssigned_rank();
    int hisRank = him.assigned_rank;

    if (this == him) {
        return 0;
    }
    if (myRank > hisRank) {
        return 1;
    }
    if (myRank < hisRank) {
        return -1;
    }
    if (myRank == hisRank) {
//            if (is_trainer && !o.is_trainer) {
//                i = 1;
//            }
//            if (!is_trainer && o.is_trainer) {
//                i = -1;
//            }
//            if (is_trainer && o.is_trainer) {
//                i = 0;
//            }
//            if (!is_trainer && !o.is_trainer) {
//                i = 0;
//            }
        return 0;
    }

    return 0;
}

@Override
public int hashCode() {
    int hash = 7;
    hash = 31 * hash + this.assigned_rank;
    hash = 31 * hash + (this.is_trainer ? 1 : 0);
    return hash;
}

@Override
public boolean equals(Object o) {

    if (this == o) {
        return true;
    }


    int myRank = this.getAssigned_rank();
    int hisRank = 0;

    if (o instanceof crew) {
        crew him = (crew) o;
        hisRank = him.assigned_rank;
    } else {
        return false;
    }

    if (myRank > hisRank) {
        return false;
    }
    if (myRank < hisRank) {
        return false;
    }
    if (myRank == hisRank) {
//            if (is_trainer && !o.is_trainer) {
//                i = 1;
//            }
//            if (!is_trainer && o.is_trainer) {
//                i = -1;
//            }
//            if (is_trainer && o.is_trainer) {
//                i = 0;
//            }
//            if (!is_trainer && !o.is_trainer) {
//                i = 0;
//            }
        return true;
    }

    return false;
}

}

实现 equals() 只是解决这个问题的尝试。给定的异常带有或不带有 equals()。我看不出compareTo 方法如何违反其契约。非常感谢任何帮助...有一天这段代码必须与 java 7 一起工作,但我不知道如何... 谢谢


看到这个:

From http://www.oracle.com/technetwork/java/javase/compatibility-417013.html#source

区域:API:实用程序概要:更新了数组和 集合可能会抛出 IllegalArgumentException

说明:java.util.Arrays.sort使用的排序算法和 (间接)被 java.util.Collections.sort 取代。新的 如果排序实现检测到,可能会抛出 IllegalArgumentException 违反可比合同的可比公司。以前的 实施默默地忽略了这种情况。如果之前的 行为是所需的,您可以使用新系统 属性 java.util.Arrays.useLegacyMergeSort,恢复以前的 合并排序行为。

不兼容的性质:行为

RFE:6804124

有关更详细的信息,请参阅错误数据库参考这里.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

比较方法违反了它的一般契约!仅限 Java 7 的相关文章

随机推荐

  • Jquery 验证电子邮件地址或域名

    用户可以输入电子邮件地址或域名 我如何使用 jQuery 验证插件来验证这一点 可接受的值 电子邮件地址 域名 Eg email protected or sample com 我需要在同一文本框中验证域名 document ready f
  • 从 Go gRPC 处理程序中的客户端证书获取主题 DN

    我正在使用带有相互 tls 的 Golang gRPC 是否可以从 rpc 方法获取客户端的证书主题 DN func main creds credentials NewTLS tls Config ClientAuth tls Requi
  • 如何为滑块赋予不同的背景颜色?

    我想根据滑块位置为滑块提供两种不同颜色的颜色 一种颜色应位于滑块之前 另一种颜色应位于滑块之后 我使用 CSS 实现了其他设计 这是对输入 type range 进行皮肤处理的代码 input type range border 1px s
  • Request.UrlReferrer 为空?

    在 aspx C NET 页面 我正在运行框架 v3 5 中 我需要知道用户来自哪里 因为他们无法在不登录的情况下查看页面 如果我有页面A 用户想要查看的页面 重定向到页面B 登录页面 Request UrlReferrer 对象为 nul
  • Numpy 字典顺序

    我想按字典顺序对以下数组进行排序a 获取索引位置 但是 我在理解 numpy 结果时遇到问题 gt gt gt a np asarray 1 1 1 2 1 2 2 1 2 3 1 0 1 2 3 3 2 2 gt gt gt a arra
  • 强制浏览器下载 PDF 文档而不是打开它

    我想让浏览器从服务器下载 PDF 文档 而不是在浏览器本身中打开该文件 我正在使用 C 下面是我使用的示例代码 它不起作用 string filename Sample server url response redirect filena
  • 如何使用 C++11 std::thread 设置堆栈大小

    我一直在努力熟悉std 线程C 11 中的库 并且遇到了绊脚石 最初 我来自 posix 线程背景 并且想知道如何在构造之前设置 std thread 的堆栈大小 因为我似乎找不到执行此类任务的任何参考 使用 pthreads 设置堆栈大小
  • 将 SQL Server 2008 地理类型与 nHibernate 的 CreateSQLQuery 结合使用

    我正在尝试使用 nHibernate 2 0 1GA 发出 SQL 更新语句 如下所示 sqlstring string Format set nocount on update myusers set geo geography Poin
  • 更改日期变量的时区

    我有一个字符串 我已将其转换为日期变量 但事实证明时区是错误的 我尝试使用的字符串是 var v 2013 09 05 17 53 05 00 var parsedvalueInField new Date v 如果我发出 parsedva
  • 如何防止元组的并集变成并集的元组?

    尝试编写一个在发生意外 失败 时优雅返回的函数 正在考虑使用 go 风格的函数 return 来 gonig 并将 return 键入为 Val null null Error 但是 当尝试使用 if 语句对返回值进行类型保护时 const
  • 无法通过 apache Camel http 将文件发送到 Rest Web 服务

    我是 Camel 新手 在通过 Camel http 将文件发送到 Web 服务时遇到问题 我有一个 REST Web 服务 它使用多部分表单数据类型内容并接受输入作为表单数据的一部分 当我通过camel发送文件和表单参数时 它在camel
  • 以编程方式创建组:无法通过迁移访问权限

    看到后这个帖子 我尝试通过此迁移在项目设置中创建自己的组 from django db import migrations from django contrib auth models import Group Permission de
  • Discord C# 用户加入消息

    我正在使用 C 中的 Discord Net 来制作一个机器人 到目前为止 我的机器人运行得非常好 但我希望它在用户加入特定服务器时自动为他们分配特定角色 我从未真正学过任何 C 只学过一点 C 所以我知道基本语法 我该怎么办呢 我假设我会
  • 如何针对 R 中的大型矩阵有效计算所有可能组合的归一化比率?

    我想为 R 中的大矩阵有效计算所有可能组合的归一化比率 我之前问过类似的问题here并且在数据较少的情况下 那里提供的解决方案效果很好 但是 当我尝试对大型数据集 400 x 2151 应用相同的解决方案时 我的系统挂起 我的系统配备 16
  • JavaScript - 使用 childNode 遍历 HTML DOM 在非 IE 浏览器中会导致错误

    我的浏览器中呈现了下表 它是从服务器端生成的 table class tblQuestionsContainer border 0 tr td class tdQuestion Are u an indian citizen td tr t
  • Gson 库和 Proguard

    我遇到了 proguard 和 Gson 库的问题 我的代码是 AdServerResult result AdServerResult new Gson fromJson json AdServerResult class 我创建了一个新
  • 为 MIPS 编译 Linux 内核 [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我有一台 32 位 MIPS 机器 想在上面运行 Linux 我需要使用我的 Windows 7 机器将 Linux 交叉编译为 MIPS 我对如何解决这个问题感到困惑 有人可以
  • 使用内部联接的简单 hql 命名查询

    我想在我的域 实体对象中做这样的事情 Entity NamedQueries NamedQuery name favouriteCats query from Cat c inner join on UserCat uc where uc
  • 编码麻烦 - 一种格式到另一种格式

    我有一个抓取工具正在从其他地方收集一些我无法控制的数据 源数据包含各种有趣的 Unicode 字符 但它将它们转换为一种非常无用的格式 因此 u00e4 对于带有元音变音的小 a 没有我认为应该存在的双引号 当然 这会在我的 HTML 中以
  • 比较方法违反了它的一般契约!仅限 Java 7

    我知道这个问题已经有一段时间了 并检查了我之前能得到的所有答案 但这个仍然不起作用 对象 crew 代表具有等级和其他项目的船员 应通过比较 int 值 signed rank 来进行比较 如果两个实例中该值相等 则布尔值 is train