1

重複の可能性:
ArrayList 宣言 Java

Java では、ArrayList が List を使用して宣言されることが多いのはなぜですか?

List<String> strList1 = new ArrayList<String>();
ArrayList<String> strList2 = new ArrayList<String>();

これら2つの違いを理解できません。一方が他方よりも優れていますか?または特定の用途がありますか?

4

7 に答える 7

5

ArrayListクラスはインターフェースを実装しますList

通常は、インターフェイスの型のオブジェクトを宣言し、もちろんそのインターフェイスの実装を使用してインスタンス化することをお勧めします。

このようにして、必要に応じて実装を変更できますが、宣言された型は変更されません。このようにして、特に変数をパラメーターとして取得するメソッドで、コードを変更しすぎないようにすることができます。Listメソッドは、特定の実装ではなく、パラメータとして取得し続けます。

于 2012-09-28T17:36:52.343 に答える
4

Java では、インターフェース内のリストであり、ArrayList はそのインターフェースを実装するいくつかのクラスの 1 つです。最初の表記法の利点は、コードの残りの部分を変更することなく、使用する実装を簡単に変更できることです。たとえば、後で ArrayList の代わりに Vector を使用することにした場合は、コードを次のように変更できます。

List<String> strList1 = new Vector<String>();
于 2012-09-28T17:39:01.247 に答える
1

基本的に、以前の返信では、ListをArrayListまたはListインターフェイスも実装している別のオブジェクトにアップキャストできると言っていたと思います。

于 2012-09-28T17:43:38.317 に答える
1

コードをインターフェイスにバインドしたままにしておくと、必要に応じて実装クラスを非常に簡単に変更できます。

Concreteクラスでコーディングする場合は、コードをそのクラスにバインドすることで、そのクラスに固有の機能を使用できます。そして、将来の交換は困難になります。

機能を理解するには、サードパーティからのクラスをよく考えてください。コードを特定のベンダーに依存する必要はありません。必要に応じて、クラスを別のベンダーに変更できます。どちらもインターフェースにバインドされているため、変更は簡単です。

于 2012-09-28T17:41:56.783 に答える
1

リスコフ置換原理

代用可能性は、オブジェクト指向プログラミングの原則です。コンピュータプログラムでは、S が T のサブタイプである場合、型 T のオブジェクトは型 S のオブジェクトに置き換えることができる (つまり、型 S のオブジェクトは型 T のオブジェクトに置き換えることができる) と述べています。そのプログラムの望ましい特性 (正確さ、実行されたタスクなど)。

ArrayListのサブタイプですList

于 2012-09-28T17:39:01.110 に答える
1

この質問については特にありませんが、参照を保持するためにクラスではなくインターフェイスを使用することを常にお勧めします。これにより、必要なときにいつでも実装を変更できます。たとえば、いつでもリンクリストに変更できます

于 2012-09-28T17:40:26.003 に答える
1

ここでの考え方は、具体的なオブジェクト自体ではなく、インターフェイスを設計しているということです。strList1インターフェイスは、必要にLinkedList応じて後で に交換できるという意味でより柔軟です。

于 2012-09-28T17:38:51.193 に答える