当前位置: 首页 > 知识库问答 >
问题:

比较方法违反了其总合同!可以进行静态分析吗?

孙元明
2023-03-14

和以前的许多人一样,我点击了<code>IllegalArgumentException:比较方法违反了它的一般约定我需要检查遗留代码中所有可能出现的这种情况。最好的方法是一个静态分析工具,它将遍历所有代码并检测可能的问题。

  1. TimSport如何检测这些问题
  2. 是否可以运行代码的静态分析并发现问题
  3. 有这样的工具吗?也许作为已经存在的静态分析工具的规则

共有1个答案

黄宏旷
2023-03-14

当它将两个运行合并在一起时,它将在合并阶段检测它们。通常,这意味着您的比较函数没有遵循规则,例如a

我不知道有什么静态分析工具可以在这里提供帮助,但我不确定是否需要它。

你最好的办法是观察比较函数,并确保它为各种数据集返回正确的值。实际上,找到比较函数应该相对简单,只需在所有文件中搜索比较器

 类似资料:
  • 我已经在类上实现了Comaprable,它给了我比较方法违反了它的总合同!,由于有一些值返回为 null,代码如下 公共静态比较器名称比较器 = 新比较器() {

  • 我收到以下错误:“比较方法违反了它的一般合同!”当使用下面的比较器时,我无法使用jUnit复制异常。我想知道是什么导致了这个问题,以及如何复制它。有其他人也有同样的问题,但不知道如何复制。 使用以下方法调用该代码: 感谢任何帮助。 额外信息:该错误似乎发生在Java utils中的TimSort类中,并来自一个名为mergeLo的方法。链接:http://grepcode.com/file/rep

  • 我试图使用比较器基于两个字符串的比较对数组列表进行排序,但我最终使用的比较方法违反了它的一般契约错误。如果字符串中出现空值比较,我该如何处理? 密码 错误

  • 我正在尝试编写一个表排序器,该排序器将始终将空值排序到底部。所以我写了一个实现 “包装器”类: 您会注意到方法只执行空检查,然后服从包装值类的方法。 然后我编写了一个< code >行排序器,它的< code >比较器检查< code >排序顺序 但这会引发一个错误(无法找出原因,无法重现-继续阅读): 幸运的是,这个错误似乎没有影响任何事情,因为一切都按预期进行。 看到这个问题(Java . l

  • 我看到我的应用程序在一些中国 Android 手机上发生了很多崩溃,并出现错误:比较方法违反了其总合同! 我读过这与Collections.sort有关。 我不太确定的是,这是否是因为我的自定义比较器。 以下是错误发生的地方: 比较器是这样的: 所以我不太确定比较器是否搞砸了什么,或者我是否需要以不同的方式进行collections.sort调用 感谢任何帮助

  • 问题内容: 有人可以简单地向我解释一下,为什么此代码会引发异常,“比较方法违反了它的一般约定!”,我该如何解决? 问题答案: 你的比较器不是可传递的。 让是的父,并成为母公司。既然和,那一定是这样。但是,如果在和上调用比较器,它将返回零,即。这违反了合同,因此引发异常。 该库可以很好地检测到这一点并让你知道,而不是行为不规律。 满足传递性要求的一种方法是遍历整个链,而不仅仅是查看直接祖先。