NoSuchMethodError - 没有静态方法比较 (java/util/Comparator)
NoSuchMethodError - no static method comparing (java/util/Comparator)
我正在 Android 设备上使用 Gluon 从 java.util
中排序 List
。即使分配了 8GB,应用程序也不会针对 iOS(内存不足)进行编译,但这是另一个问题。
classpath 'org.javafxports:jfxmobile-plugin:1.3.4'
compile 'com.gluonhq:charm:4.3.2'
jfxmobile version = '3.2.4'
导致崩溃的这一行:
highscoreList.sort(comparing(Highscore::getScore).reversed()); //#89
03-22 09:42:14.709 27312 27337 E AndroidRuntime: FATAL EXCEPTION: JavaFX Application Thread
03-22 09:42:14.709 27312 27337 E AndroidRuntime: Process: com.x.pacman, PID: 27312
03-22 09:42:14.709 27312 27337 E AndroidRuntime: java.lang.NoSuchMethodError: No static method comparing(Ljava/util/function/Function;)Ljava/util/Comparator; in class Ljava/util/Comparator; or its super classes (declaration of 'java.util.Comparator' appears in /system/framework/core-libart.jar)
03-22 09:42:14.709 27312 27337 E AndroidRuntime: at com.x.pacman.HighscoreUtil.readHighscoreList(HighscoreUtil.java:89)
我开始搜索,我找到了 ,所以我尝试执行以下操作,但它仍然崩溃,现在我没主意了:
Comparator<Highscore> comparator = new Comparator<Highscore>() {
@Override
public int compare(Highscore highscore1, Highscore highscore2) {
return highscore1.getScore() - highscore2.getScore();
}
};
highscoreList.sort(comparator); //#97
03-22 11:30:48.836 16547 16570 E AndroidRuntime: java.lang.NoSuchMethodError: No interface method sort(Ljava/util/Comparator;)V in class Ljava/util/List; or its super classes (declaration of 'java.util.List' appears in /system/framework/core-libart.jar)
03-22 11:30:48.836 16547 16570 E AndroidRuntime: at com.kaufland.pacman.HighscoreUtil.readHighscoreList(HighscoreUtil.java:97)
两个 Comparator#comparing()
and List#sort(Comparator)
都是在 API 级别 24 中添加的,您的设备可能 运行 较低的 API 级别。
自 API 级别 1 以来一直存在的 Collections#sort()
可能会给您带来更好的运气。
仅供参考。我在使用 http://www.vavr.io/ 集合时遇到此错误。
我调用了需要 API 级别 24 的函数 toSortedSet() of a LinkedHashSet. This function tries to call Comparator.naturalOrder()。
如果必须使用较低的 API 级别,只需使用重载的 toSortedSet(Comparator) 函数并传递合适的比较器即可。
我正在 Android 设备上使用 Gluon 从 java.util
中排序 List
。即使分配了 8GB,应用程序也不会针对 iOS(内存不足)进行编译,但这是另一个问题。
classpath 'org.javafxports:jfxmobile-plugin:1.3.4'
compile 'com.gluonhq:charm:4.3.2'
jfxmobile version = '3.2.4'
导致崩溃的这一行:
highscoreList.sort(comparing(Highscore::getScore).reversed()); //#89
03-22 09:42:14.709 27312 27337 E AndroidRuntime: FATAL EXCEPTION: JavaFX Application Thread
03-22 09:42:14.709 27312 27337 E AndroidRuntime: Process: com.x.pacman, PID: 27312
03-22 09:42:14.709 27312 27337 E AndroidRuntime: java.lang.NoSuchMethodError: No static method comparing(Ljava/util/function/Function;)Ljava/util/Comparator; in class Ljava/util/Comparator; or its super classes (declaration of 'java.util.Comparator' appears in /system/framework/core-libart.jar)
03-22 09:42:14.709 27312 27337 E AndroidRuntime: at com.x.pacman.HighscoreUtil.readHighscoreList(HighscoreUtil.java:89)
我开始搜索,我找到了
Comparator<Highscore> comparator = new Comparator<Highscore>() {
@Override
public int compare(Highscore highscore1, Highscore highscore2) {
return highscore1.getScore() - highscore2.getScore();
}
};
highscoreList.sort(comparator); //#97
03-22 11:30:48.836 16547 16570 E AndroidRuntime: java.lang.NoSuchMethodError: No interface method sort(Ljava/util/Comparator;)V in class Ljava/util/List; or its super classes (declaration of 'java.util.List' appears in /system/framework/core-libart.jar)
03-22 11:30:48.836 16547 16570 E AndroidRuntime: at com.kaufland.pacman.HighscoreUtil.readHighscoreList(HighscoreUtil.java:97)
两个 Comparator#comparing()
and List#sort(Comparator)
都是在 API 级别 24 中添加的,您的设备可能 运行 较低的 API 级别。
自 API 级别 1 以来一直存在的 Collections#sort()
可能会给您带来更好的运气。
仅供参考。我在使用 http://www.vavr.io/ 集合时遇到此错误。
我调用了需要 API 级别 24 的函数 toSortedSet() of a LinkedHashSet. This function tries to call Comparator.naturalOrder()。
如果必须使用较低的 API 级别,只需使用重载的 toSortedSet(Comparator) 函数并传递合适的比较器即可。