Java Collections Frameworkを調べてみると、かなりの数のインターフェースにコメントがあることがわかりました(optional operation)
。これらのメソッドを使用すると、クラスUnsupportedOperationException
を実装したくない場合にクラスを実装できます。
この例は、のaddAll
メソッドSet Interface
です。
さて、この一連の質問で述べられているように、インターフェースは、使用が期待できるものを定義する契約です。
インターフェースは、クラスが行うこととそれを行う方法を分離するため、重要です。クライアントが期待できるものを定義する契約により、開発者は契約を維持する限り、自由に実装できます。
そして
インターフェースとは、オブジェクトが実行できるアクションの説明です。たとえば、ライトスイッチをオンにしたとき、ライトが点灯したとき、どのように気にせず、それを行うだけです。オブジェクト指向プログラミングでは、インターフェイスとは、オブジェクトが「X」になるために必要なすべての機能の説明です。
そして
インターフェースベースのアプローチはかなり優れていると思います。その後、依存関係をうまくモックアウトできますが、基本的にはすべてがあまり密結合ではありません。
インターフェースの目的はコントラクトを定義し、依存関係を疎結合にすることであるため、一部のメソッドでUnsupportedOperationException
目的を達成できない場合がありますか?それは私がもう渡されSet
ずに使うことができないことを意味しますaddAll
。むしろ、どの実装Set
が渡されたかを知る必要があるためaddAll
、使用できるかどうかを知ることができます。それは私にはかなり価値がないようです。
それで、何のポイントUnsupportedOperationException
ですか?従来のコードを補うだけで、インターフェースをクリーンアップする必要がありますか?それとも、私が見逃しているより感覚的な目的がありますか?
addAll
していませんHashSet
。これは、AbstractCollection
ほとんど確実にスローしないデフォルトの実装に従いますUnsupportedOperationException
。