欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JDK1.7 不兼容compare方法

程序员文章站 2022-05-20 18:06:51
...
java.lang.IllegalArgumentException: Comparison method violates its general contract!

网上查到一个解释:

Description: The sorting algorithm used by java.util.Arrays.sort and (indirectly) by java.util.Collections.sort has been replaced. The new sort implementation may throw an IllegalArgumentException if it detects a Comparable that violates the Comparable contract. The previous implementation silently ignored such a situation. If the previous behavior is desired, you can use the new system property, java.util.Arrays.useLegacyMergeSort, to restore previous mergesort behavior.
也就是说jdk 7的sort函数的实现变了,造成了这个问题,具体原因未知。

改一下系统设置,还是选择使用老版本的排序方法,在代码前面加上这么一句话:System.setProperty("java.util.Arrays.useLegacyMergeSort", "true");
// return a_actorDetails1.getId() - a_actorDetails2.getId() 改为一下
// double 直接return不支持。
if (a_actorDetails1.getId() - a_actorDetails2.getId() > 0) {
                comparisonResult = 1;
            }
            else if (a_actorDetails1.getId() - a_actorDetails2.getId() == 0) {
                comparisonResult = 0;
            }
            else {
                comparisonResult = -1;
            }
            break;