2

为什么Java中的PriorityQueue定义为,

PriorityQueue<T>

而不是,

PriorityQueue<T extends Comparable<? super T>

如果不对 Comparable 类型的对象进行排队,它会在运行时给出 ClassCastException。(如果我没有使用自定义比较器)。

为什么不在编译时捕获它?

4

1 回答 1

5

这样做是为了让您仍然可以为未实现该Comparable接口的对象使用优先级队列。在这种情况下,您只需提供自己的自定义比较器,一切正常。

这增加了类的可用性,成本最低甚至没有。此行为在Javadoc中有详细记录。

于 2013-02-21T02:13:10.087 回答