IllegalArgumentException:比较方法违反了其一般合同

时间:2018-10-19 02:51:59

标签: java android

@Override
public int compareTo(LelinkServiceInfoWrapper o) {
    if (this == o) {
        return 0;
    }
    // 1. 判断是否在线
    if (isOnLine() == o.isOnLine()) {
        // 2. 判断是否常用
        if (isFavorite == o.isFavorite) {
            // 3. 判断是否是同一wifi
            // 判断Lelink或DLNA是否在线来判断

            // 3. 判断是否有uid
            if (!TextUtils.isEmpty(this.uid) && !TextUtils.isEmpty(o.uid)) {
                return 0;
            } else if (TextUtils.isEmpty(this.uid) && TextUtils.isEmpty(o.uid)) {
                return 0;
            } else {
                return !TextUtils.isEmpty(this.uid) ? -1 : 1;
            }
        } else {
            return isFavorite ? -1 : 1;
        }
    } else {
        return isOnLine() ? -1 : 1;
    }
}

isOnLine是布尔值,uid是字符串值。 和此异常堆栈跟踪,我该如何解决呢?:

java.lang.IllegalArgumentException
Comparison method violates its general contract!
java.util.ComparableTimSort.mergeHi(ComparableTimSort.java:866)
java.util.ComparableTimSort.mergeAt(ComparableTimSort.java:483)
java.util.ComparableTimSort.mergeCollapse(ComparableTimSort.java:406)
java.util.ComparableTimSort.sort(ComparableTimSort.java:213)
java.util.Arrays.sort(Arrays.java:1251)
java.util.Arrays.sort(Arrays.java:1426)
java.util.Arrays$ArrayList.sort(Arrays.java:3823)
java.util.Collections.sort(Collections.java:201)
java.util.Collections.sort(Collections.java:156)
com.hpplay.sdk.source.browse.impl.BrowserManager$a.a(SourceFile:524)
com.hpplay.sdk.source.browse.impl.BrowserManager$a.a(SourceFile:502)
com.hpplay.sdk.source.browse.impl.BrowserManager$a.serviceAlive(SourceFile:452)
com.hpplay.sdk.source.browse.handler.a.c(SourceFile:117)
com.hpplay.sdk.source.browse.handler.a.run(SourceFile:71) 

为什么此代码会引发异常,“比较方法违反了它的一般约定!”,我该如何解决?

0 个答案:

没有答案