Класс не может быть приведен к исключению java.util.collection
Я просто пытаюсь вставить некоторые объекты класса в очередь с приоритетами в Java. Но получение ошибки "com.java.split.MyComp не может быть приведено к java.util.Collection". Я пробовал разные варианты, передавая другой параметр,
PriorityQueue<Node> serverLog = new PriorityQueue<Node>();
Код:
import java.util.Comparator; import java.util.PriorityQueue;
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.split.Node нельзя преобразовать в java.lang.Comparable в java.util.PriorityQueue.siftUpComparable(Неизвестный источник) в java.util.PriorityQueue.siftUp(Неизвестно Источник) в java.util.PriorityQueue.offer(Неизвестный источник) в java.util.PriorityQueue.add(Неизвестный источник) в com.java.split.Split.main(Split.java:19)
Было много постов, предлагающих реализовать Comparator и метод сравнения override, но я не мог это исправить. Я не знаю номер объекта, который я собираюсь вставить. пожалуйста, предложите, что можно сделать, чтобы сделать эту работу?
Спасибо!! -Bala
1 ответ
Ваше исключение происходит в вашем закомментированном коде (при условии, что это не
//PriorityQueue<Node> serverLog = new PriorityQueue<Node>((Collection<? extends Node>) new MyComp());
PriorityQueue
не имеет конструктора, который принимает только Comparator
, И вы, очевидно, не можете бросить MyComp
к Collection
,
Я просто пытаюсь вставить объект класса в очередь с приоритетами в Java
Используйте конструктор, который принимает initialCapacity
и Comparator
,
int initialCapacity = ...; // some value
PriorityQueue<String> serverLog = new PriorityQueue<>(initialCapacity , comparator);
если вы хотите использовать свой обычай Comparator
,