Java に EmptyQueueException がないのはなぜですか? [closed] 質問する

Java に EmptyQueueException がないのはなぜですか? [closed] 質問する

popのメソッドでは、 Stack が空の場合にjava.util.Stackがスローされます。しかし、のメソッド(クラスのに似ています) は、代わりに がスローされます。Java でこのような不一致が生じるのはなぜでしょうか?EmptyStackExceptionremovejava.util.QueuepopStackNoSuchElementException

ベストアンサー1

このStackクラスは、コレクション フレームワークが導入される前の Java 1.0 時代からのレガシー クラスです。そのインターフェイスは下位互換性を持つ必要があり、そのように設計されました。

対照的に、Queueインターフェースはコレクション フレームワークの Java 1.5 リビジョンで導入されました。その時点で、 はNoSuchElementExceptionこの種のエラー状態を表現する最良の方法として設計者によって選択されていました1

ご了承くださいNoSuchElementException できたStack以来使用されている両方クラスは Java 1.0 にも存在していましたが、当時の設計者は明らかに別の考えを持っていました2

したがって、これは Java API の進化の過程で生じた単なる歴史的な異常です。このStackクラスを使用する既存のアプリケーションのバイナリ互換性を損なうことなく修正することはできません。


1 - あなたはそれに同意しないかもしれませんが、なぜそうなのかと尋ねました。そしてこれがその理由です。

2 - あるいは、API 設計を正しく行うのにあまりにも急いでいたのかもしれません。Java 1.0 リリースは、認識された市場機会に対応するために極度のプレッシャーの下で行われました。いくつかの間違いがあり、時間内に修正できませんでした。その他の例としては、API Enumeration、非推奨のThreadメソッド、HashtableクラスVectorなどStringBufferがあります。しかし、Java 1.1 がリリースされたときには、もう遅すぎました。

おすすめ記事