【问题标题】:Comparison method violates its general contract! Array.sort()比较方法违反了它的总合同!数组.sort()
【发布时间】:2016-11-18 19:22:37
【问题描述】:

这是我在下面抛出异常的代码:

Arrays.sort(listFile, new Comparator<File>() {
        public int compare(File f1, File f2) {
               return Long.valueOf(f1.lastModified()).compareTo(f2.lastModified());
        }
});

我认为这可能是 Java 7 中的 Java 语言更改,但我不知道我必须进行哪些更改才能使其正常工作。非常感谢!

Fatal Exception: java.lang.IllegalArgumentException: Comparison method violates its general contract!
   at java.util.TimSort.mergeLo(TimSort.java:743)
   at java.util.TimSort.mergeAt(TimSort.java:479)
   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 de.munichsdorfer.screenittrial.contentobserver.MyContentObserver.onChange(MyContentObserver.java:51)
   at android.database.ContentObserver.onChange(ContentObserver.java:145)
   at android.database.ContentObserver$NotificationRunnable.run(ContentObserver.java:216)
   at android.os.Handler.handleCallback(Handler.java:739)
   at android.os.Handler.dispatchMessage(Handler.java:95)
   at android.os.Looper.loop(Looper.java:145)
   at android.os.HandlerThread.run(HandlerThread.java:61)

更新:将代码更改为

return Long.valueOf(f1.lastModified()).compareTo(Long.valueOf(f2.lastModified()));

现在显示:

【问题讨论】:

标签: android arrays sorting


【解决方案1】:

您正在将第一个 lastModified 转换为 Long,但不是第二个。试试这个:

return Long.valueOf(f1.lastModified()).compareTo(Long.valueOf(f2.lastModified()));

【讨论】:

  • mhh,我根据你的建议改了,但现在Android Studio给出了一些建议。我编辑了我的帖子。
  • 自动装箱会处理这种转换。 自动装箱是 Java 编译器在基本类型和它们对应的对象包装类之间进行的自动转换
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-10
  • 1970-01-01
  • 1970-01-01
  • 2015-08-07
  • 1970-01-01
相关资源
最近更新 更多