2012-04-26 8 views

答えて

5

ListやArrayListのような型の場合は、コンパイルが行われるべきではないので、リスト昇格リストCode to an interfaceを返すべきです。

CopyOnWriteArrayListのような並行性パッケージであり、リストインターフェイスで定義されていないaddIfAbsentのようなメソッドを使用していたため、自分自身が制限されていました。

あなたはArrayListのか、そのことについては、具体的な実装を返すのであれば、あなたが契約(Listインタフェース)で定義されていないAPIを使用することができますが、その後、あなたはArrayListからLinkedListに何か他のもの(に特定の実装からchangeingに制限されています)、あなたのAPIを使用するすべての人があなたの変更に応じて変更する必要がありますので、私は思って過ぎています。

4

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

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

2

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

15

インターフェイスに適した最も一般的なタイプを返すことをお勧めします。

ArrayListが本質的に返すデータに適切な理由がある場合は、それを使用する必要があります。通常、リストは結構ですが、返された値は、本質的に順序付けられていない場合、あなたはまた、コレクションを使用して検討するかもしれない:絵のため

Diagram of Java collections hierarchy

+2

1 :) –

+1

図をありがとう –

関連する問題