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

vik*_*.rk 2 java generics collections priority-queue

为什么Java中的PriorityQueue被定义为,

PriorityQueue<T>

而不是,

PriorityQueue<T extends Comparable<? super T>

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

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

Per*_*ion 5

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

这增加了班级的可用性,最小化甚至免费.这种行为在Javadoc中有详细记录.