我搜索了一些相同的問題,我知道原因。然而,碰撞發生的只有一次,所以我來這裏問你什麼可能導致崩潰。」比較方法違反了它的一般合同!「
Collections.sort(downloadTasks, new Comparator<DownloadTask>() {
@Override
public int compare(DownloadTask lhs, DownloadTask rhs) {
if (lhs == null || rhs == null) return 0;
return (int) (lhs.mTaskInfo.time - rhs.mTaskInfo.time);
}
});
的錯誤是:
java.lang.IllegalArgumentException異常:比較法違反其總承包!在java.util.TimSort.mergeHi(TimSort.java:864) at java.util.TimSort.mergeAt(TimSort.java:481) at java.util.TimSort.mergeCollapse(TimSort.java:406) at java .util.TimSort.sort(TimSort.java:210) at java.util.TimSort.sort(TimSort.java:169) at java.util.Arrays.sort(Arrays.java:2010) at java.util .Collections.sort(Collections.java:1883)
正如你所看到的,我通過它們的time
成員比較兩個對象。 time
是long
類型。
我認爲墜機可能是從:
- 是否也將長期爲int導致崩潰?
- if(lhs == null || rhs == null)return 0;但理論上lhs和rhs都不爲零。
編輯
如果lhs
和rhs
可以爲空,我該怎麼辦?
EDIT對於Android的
在Android中,Long.compare()
需要API 19.您可以在API 19做到這一點:
public static int compare(long lhs, long rhs) {
return lhs < rhs ? -1 : (lhs == rhs ? 0 : 1);
}
什麼會崩潰嗎?你會得到什麼樣的錯誤,什麼時候,什麼代碼,會發生什麼,你期望會發生什麼?看看[問] – pvg
由於標題說錯誤是'比較方法違反其總合約!' – CoXier
你能解釋爲什麼演員導致崩潰? @Thilo – CoXier