为什么Java PriorityQueue <t>不强制执行可比较对象</t>

时间:2013-02-21 02:10:27

标签: java generics collections priority-queue

为什么Java中的PriorityQueue定义为

PriorityQueue<T>

而不是,

PriorityQueue<T extends Comparable<? super T>

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

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

1 个答案:

答案 0 :(得分:5)

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

这增加了班级的可用性,最低限度地降低成本。 Javadoc中详细记录了此行为。