12

具体的なクラスの代わりにインターフェースを返すことに同意していることに気づきました。

理由は簡単です。緩い結合が必要です。

しかし、他の影響やトレードオフはありますか?

4

4 に答える 4

22

インターフェイスに適した最も一般的なタイプを返すのが最善です。

返すデータに本質的に適切である理由ArrayListがある場合は、それを使用する必要があります。通常は問題ありませんが、戻り値が本質的に順序付けされていない場合は、List使用を検討することもできます。Collection

Javaコレクション階層の図

于 2012-04-26T07:10:58.803 に答える
6

ListやArrayListのようなタイプの場合、複雑になることはなく、Listプロモートコードをインターフェイスに返す必要があります。

これがCopyOnWriteArrayListのような並行性パッケージからのものであり、Listインターフェースで定義されていないaddIfAbsentのようなメソッドを使用していた場合、そうすることは制限されていることに気付くでしょう。

したがって、ArrayListまたはその具体的な実装を返す場合は、コントラクト(インターフェイス)で定義されていないAPIを使用できますが、特定の実装から別の実装(から)Listに変更することは制限されます。APIは、変更に応じて変更する必要があります。期待しすぎだと思います。ArrayListLinkedList

于 2012-04-26T07:07:24.023 に答える
4

つまり、返されたオブジェクトArrayListのインターフェイスのメソッドではないメソッドを呼び出すことはできません。List

ただし、オブジェクトがであるArrayList場合は、キャストを行うことができます。

于 2012-04-26T07:06:49.493 に答える
4

具象クラスを返す唯一の理由は、呼び出し元がこの具象実装、または場合によっては具象実装の追加インターフェースを認識する必要がある場合です。たとえば、Androidでは、フレームワークがジェネリックインターフェイスArrayListを適切にシリアル化する方法を認識していないため、使用する必要があります。List

于 2012-04-26T07:08:58.330 に答える