1

「O'Reilly - Programming Android」では、次のコードを避けることを推奨しています。

ArrayList<String> a = new ArrayList<String>();

しかし、これを置き換えるには:

List<String> a = new ArrayList<String>();

a彼らは、後で のタイプを連結リストに変更する必要がある場合、コードの保守が容易になると主張しています。もしそうなら、それを type Collection、またはさらににしないのはなぜObjectですか?

型を変更するにはインスタンス化を変更する必要があるため、可能な限り型を制限し、必要に応じて余分な行を変更する方がよいと思います。

それらは正しいですか?

4

4 に答える 4

3

それらは正しいです。

可能な限り制限されたタイプを使用する必要があります。またはCollectionの代わりに が適切な抽象化である場合は、代わりにそれを使用してください。何かを として使用する必要がある場合は、必ずとして参照してください。ただし、より具体的にする必要がある場合は、より具体的にしてください。秘訣は、必要のないときにキャストを避けることです。ListSetObjectObject

あなたが述べたように、アイデアは、実装の詳細を公開したくないときに非表示にすることです。これにより、ソフトウェアが使いやすく、保守しやすくなります。たとえば、 を返すメソッドがある場合、そのListソフトウェアを使用する人は、その実装が実際にどのようなものであるかを気にする必要はありませんList。これにより、ソフトウェアが理解しやすくなります。Listこのため、(ほとんどの場合) そのメソッドを呼び出すプログラムに悪影響を与えることなく、どの型を返すかを自由に変更できます。

于 2012-05-18T16:09:19.890 に答える
0

彼らは間違ってる。

型がパブリック API に現れる場合、それはセマンティクスが許す限り一般的であるべきです。

List<String> getStringList();

実装の詳細として、タイプはプログラマーが知っている限り具体的でなければなりません。

ArrayList<String> stringList = new ArrayList<>();
于 2012-05-18T16:29:20.577 に答える
0

参照では何も役に立たないからですObject

于 2012-05-18T16:04:59.213 に答える
0

私の個人的な意見では、インターフェイスをできるだけ高い (階層で) 使用し、必要な操作を行う必要があります。

場合によっては、オブジェクトを保存し、反復し、インデックスを使用して取得するだけで済みます。Listインターフェイスがそれを提供しています。オブジェクトはこれらのメソッドを提供しません。

- を使用Objectすると、コードが読みにくくなり、キャスト例外が発生する可能性があります。

于 2012-05-18T16:07:56.273 に答える