当前位置: 首页 > 知识库问答 >
问题:

类不能强制java.util.collection异常

柏明亮
2023-03-14

我只是想在java中将一些类对象插入到优先级队列中。但是出现错误“com.java.split.MyComp不能转换为java.util.Collection”。我尝试了不同的选项,将不同的参数传递给,

PriorityQueue<Node> serverLog = new PriorityQueue<Node>();

代码:

导入java。util。比较器;导入java。util。优先队列;

public class Split {

    public static void main(String args[])
    {

        Comparator comparator = new MyComp();  

        PriorityQueue<Node> serverLog = new PriorityQueue<Node>(); 


        Node n1 = new Node(1,"one");
        serverLog.add(n1);

        Node n2 = new Node(1,"two");
        serverLog.add(n2);      <== Error Here (line 22)

        Node n3= new Node(1, "three");
        serverLog.add(n3);

    }

}

public class Node {

    private long timeStamp;
    private String log;

    public Node(long timeStamp, String log)
    {
        this.timeStamp = timeStamp;
        this.log = log;
    }

//getter and setter
}


public class MyComp implements Comparator {

    @Override
    public int compare(Object a, Object b) {

        long aTimeStamp = ((Node) a).getTimeStamp();
            long bTimeStamp = ((Node) b).getTimeStamp();


        if(aTimeStamp == bTimeStamp)
            return 0;
        else if (aTimeStamp < bTimeStamp)
            return 1;
        else
            return -1;
    }
}

但都没有起作用。我有个例外,

线程“main”java中出现异常。lang.ClassCastException:com。JAVA分裂无法将节点强制转换为java。在爪哇岛。util。优先队列。Sifta(未知源代码)位于java。util。优先队列。java上的siftUp(未知源代码)。util。优先队列。java提供(未知来源)。util。优先队列。在com上添加(未知源)。JAVA分裂分裂main(Split.java:19)

有很多帖子建议实现Comparator并重写compare方法,但我无法修复它。我不知道要插入的对象的数量。请建议可以做些什么使这项工作?

谢谢-巴拉

共有1个答案

欧阳山
2023-03-14

你的异常发生在你的注释代码中(假设它不是

//PriorityQueue<Node> serverLog = new PriorityQueue<Node>((Collection<? extends Node>) new MyComp());

PriorityQueue没有只接受比较器的构造函数。显然,你不能将MyComp投射到集合

我只是想在java中向优先级队列插入一个类对象

使用接受初始容量比较器的构造函数。

int initialCapacity = ...; // some value
PriorityQueue<String> serverLog = new PriorityQueue<>(initialCapacity , comparator);

如果要使用自定义的比较器

 类似资料:
  • 我有一个Springbean(),它扩展了一个抽象类()。 导致ClassCastExcture的子类变体: 在我重写子bean中父类的公共非抽象方法之前,一切都正常。之后,当我试图创建该bean的实例时,会抛出一个ClassCastException。 由返回的Bean对象是一个类实例(通过调试器检查)。为什么将对象转换为其抽象的父类不起作用?因此,如果没有在中实现的,一切都很好。有人能告诉我这

  • 我有以下文件。我需要用下面的集合与requestParam系统匹配,如果requestParam与电子邮件系统匹配,则需要获得结果值。上下快速移动系统 这里请求Param是系统 我已经尝试了下面的语法,得到了java.lang.ClassCastExctive:com.mongodb.client.internal.Aggregate IterableImpl不能转换为java.util.Arra

  • 应用程序属性 我也试图改变mysql的版本仍然一样。我该怎么解决这个?

  • 例外情况: java.lang.ClassCastException:com.interconnect.library.gcm.util.checkplayServices(util.java:96),com.interconnect.library.gcm.regiseter.handleRegister(regiseter.java:53),com.interconnect.library.g

  • 给出此SO线程中给出的最后一个示例。 我得到这个错误: 我应该使用jooq会满意的特殊映射器吗? 欢迎任何帮助 编辑: Jooq版本:3.14.3 Postgres:11 dto公司 我也尝试过使用SimpleFlatMapper 但是得到 我正在使用spring boot,以下是我对jackson的依赖: 堆栈跟踪:

  • 问题内容: 尝试将结果集强制转换为映射类时,我收到了hibernate类的类强制转换异常…我能够查看返回的结果集中的数据…但是它以Object []的形式返回我可以将Object []设置为List …我可以正确地进行hibernate映射吗?我从查询中获取了正确的数据,但映射不正确… 映射 映射类 参加班 主要 问题答案: 对于测试,我建议您在产生类强制转换异常的语句周围放置一个try-catc