Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有优先级队列的Java可比较对象_Java_Interface_Queue_Comparable - Fatal编程技术网

具有优先级队列的Java可比较对象

具有优先级队列的Java可比较对象,java,interface,queue,comparable,Java,Interface,Queue,Comparable,我试图在自定义类上使用优先级队列(java.util.PriorityQueue)。我知道PriorityQueue类使用可比较的接口,所以我在自定义类中实现了它: public class State implements Comparable<State> { public int val; public State(){ this.val = 0; } public int compareTo(State other){

我试图在自定义类上使用优先级队列(java.util.PriorityQueue)。我知道PriorityQueue类使用可比较的接口,所以我在自定义类中实现了它:

public class State implements Comparable<State> {
    public int val;

    public State(){
        this.val = 0;
    }

    public int compareTo(State other){
        return this.val - other.val;
    }
}

我做错了什么?就我所记得的,这就是我将如何实现的。谢谢您的回答。

您的代码在我的Eclipse ide中工作正常。
可能您从其他包导入了类状态?

您的代码在我的Eclipse ide中工作正常。 也许您从另一个包导入了类状态?

最初在他的评论中提出了一条非常明智的建议;本质上,请确保您没有引用另一个名为
State
的类,该类在视图中隐藏您自己的
State
,例如
java.lang.Thread.State
javax.swing.plaf.nimbus.State
。这通常是导致许多错误的原因,因此请确保记住这一点

不幸的是,这里的情况并非如此。正如我在中所指出的,在这种情况下,异常将打印任何其他
状态的限定名称,作为异常消息的一部分。由于限定名称是
状态
,因此您可能忘记了重新编译
状态
:-)

最初在他的评论中提出了一条非常明智的建议;本质上,请确保您没有引用另一个名为
State
的类,该类在视图中隐藏您自己的
State
,例如
java.lang.Thread.State
javax.swing.plaf.nimbus.State
。这通常是导致许多错误的原因,因此请确保记住这一点


不幸的是,这里的情况并非如此。正如我在中所指出的,在这种情况下,异常将打印任何其他
状态的限定名称,作为异常消息的一部分。由于限定名称是
状态
,因此您可能忘记了重新编译
状态
:-)

你确定
Comparable
中的
状态是正确的,而不是
java.lang.Thread.State
javax.swing.plaf.nimbus.State
吗?@amit在这种情况下,异常不会打印类的限定名吗?看来问题可能是他忘了重新编译
State
@oldrinb你是对的,就是这样!我假设它会编译,因为我以前在几个地方使用过该对象,但我想出于某种原因它不会。但是单独编译就可以了。谢谢。@oldrinb:这是一个答案。发布。@Richard:-)你确定
Comparable
中的
状态是正确的,而不是
java.lang.Thread.State
javax.swing.plaf.nimbus.State
例如?@amit在这种情况下,异常不会打印类的限定名吗?看来问题可能是他忘了重新编译
State
@oldrinb你是对的,就是这样!我假设它会编译,因为我以前在几个地方使用过该对象,但我想出于某种原因它不会。但是单独编译就可以了。谢谢。@oldrinb:这是一个答案。贴出来。@Richard:-)你能详细解释一下吗,我犯了同样的错误,但无法理解你的答案。你能详细解释一下吗,我犯了同样的错误,但无法理解你的答案。
PriorityQueue<State> q = new PriorityQueue<State>();
q.add(myState1);
q.add(myState2);
// etc.
Exception in thread "main" java.lang.ClassCastException: State cannot be cast to
java.lang.Comparable
    at java.util.PriorityQueue.siftUpComparable(Unknown Source)
    at java.util.PriorityQueue.siftUp(Unknown Source)
    at java.util.PriorityQueue.offer(Unknown Source)
    at java.util.PriorityQueue.add(Unknown Source)
    at MapTable.search(MapTable.java:308)
    at Map.main(Map.java:67)