Java の PriorityQueue が次のように定義されているのはなぜですか。
PriorityQueue<T>
としてではなく、
PriorityQueue<T extends Comparable<? super T>
タイプ Comparable のオブジェクトをキューに入れないと、実行時に ClassCastException が発生します。(そして、カスタム Comparator を使用していない場合)。
コンパイル時にキャッチしないのはなぜですか?
Java の PriorityQueue が次のように定義されているのはなぜですか。
PriorityQueue<T>
としてではなく、
PriorityQueue<T extends Comparable<? super T>
タイプ Comparable のオブジェクトをキューに入れないと、実行時に ClassCastException が発生します。(そして、カスタム Comparator を使用していない場合)。
コンパイル時にキャッチしないのはなぜですか?
Comparable
これは、インターフェイスを実装していないオブジェクトの優先キューを引き続き使用できるようにするためです。このような場合は、独自のカスタムコンパレータを提供するだけで、すべてが正常に機能します。
これにより、最小限のコストから無料で、クラスの使いやすさが向上します。この動作は、 Javadocで十分に文書化されています。