@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)
为什么此代码会引发异常,“比较方法违反了它的一般约定!”,我该如何解决?