java - 比较器的 NoSuchMethodError?

标签 java android libgdx

当我在 android 中运行我的程序时,我在这一行得到以下异常。

private PriorityQueue<Creature> turnqueue = new PriorityQueue<Creature>(new TurnComparator());

FATAL EXCEPTION: GLThread 18092
Process: com.buckriderstudio.clonequest, PID: 10171
java.lang.NoSuchMethodError: No direct method <init>(Ljava/util/Comparator;)V in class Ljava/util/PriorityQueue; or its super classes (declaration of 'java.util.PriorityQueue' appears in /system/framework/core-libart.jar)

这是我的比较器的样子:

public class TurnComparator implements Comparator<Creature> {    
    @Override
    public int compare(Creature c1, Creature c2) {
        if (c1.getNextMove() < c2.getNextMove()) return -1;
        if (c1.getNextMove() > c2.getNextMove()) return 1;
        else return 0;
    }   
}

这似乎是某种兼容性问题,但我不确定如何解决。 Android 根本不支持 Comparator 还是我需要稍微更改一下才能解决这个问题?什么是比较 PriorityQueue 的良好兼容替代品?

最佳答案

如果你看一下java文档,你会发现优先级队列没有这样的构造函数:

https://docs.oracle.com/javase/7/docs/api/java/util/PriorityQueue.html

您还需要指定初始容量,即

private PriorityQueue<Creature> turnqueue = new PriorityQueue<Creature>(5, new TurnComparator());

更新:值得注意的是,这在 Java 8 中确实有效——他们添加了一个额外的构造函数。 https://docs.oracle.com/javase/8/docs/api/java/util/PriorityQueue.html

关于java - 比较器的 NoSuchMethodError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36103606/

相关文章:

android - 通过 no-ip 使用 HTTP POST/PUT 的问题

android - libgdx - Assets 文件在 .apk 中翻倍

java - 队列消息传递/消费者组的工作流程?

java - 根据深度级别更改 JTree 节点图标

Java获取随机类

java - 建议的通知振动持续时间?

android - 在 Android Honeycomb 中更改菜单项文本颜色

ios - LibGDX RoboVM Robopods Facebook 登录错误

java - 在 Libgdx Java 中翻转纹理

java.lang.IllegalThreadStateException : Thread already started 异常