pop
のメソッドでは、 Stack が空の場合にjava.util.Stack
がスローされます。しかし、のメソッド(クラスのに似ています) は、代わりに がスローされます。Java でこのような不一致が生じるのはなぜでしょうか?EmptyStackException
remove
java.util.Queue
pop
Stack
NoSuchElementException
ベストアンサー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 がリリースされたときには、もう遅すぎました。