-3

この 2 つのステートメントを ArrayList 定義に使用します。

ArrayList<String> my = new ArrayList<>();
List<String> my2 = new ArrayList<>();

どちらを使用すればよいですか?

4

3 に答える 3

3

2 番目の定義では、後で ArrayList コンストラクターを、LinkedList や高性能リスト、または将来存在する可能性のあるその他の種類のリストなど、別の種類のリストに置き換えることができます。最初の定義では、ArrayList の実装に永遠に縛られています。コードの残りの部分は、この参照が明示的に ArrayList であることを信頼しているため、これを変更することはできません。

反対に、インターフェイスを使用すると、コードは特定の実装 (ArrayList など) ではなく、インターフェイスのコントラクトに依存します。これにより、ユーザーに影響を与えることなく実装を変更できるようになります。物事の変化を防ぐことはできないからです。

于 2013-02-19T16:28:10.180 に答える
1

必要なものによって異なります。通常、可能であればインターフェイス(したがってリスト)を使用することをお勧めします。そうしないと、実装クラスに固執します。たとえば、あるメソッドの入力パラメーターとしてArrayListを使用するとします。何らかの理由(パフォーマンスなど)で、ある時点でArrayListからLinkedListに切り替えることにしました。したがって、入力パラメータのタイプも変更する必要があります。インターフェイス(リスト)を使用すると、コードをリファクタリングすることなく、実装をより自由に切り替えることができます。

于 2013-02-19T16:30:42.053 に答える
1

後者。実装ではなく、インターフェースに対してプログラムします。

于 2013-02-19T16:27:25.673 に答える