-1

なぜ1ですokが、私たち2は取得します(生の型です。ジェネリック型への参照はパラメーター化する必要があります)そして再び与えますか?compilation error3warning messageListList<E>4compilation error

1- List<Integer> list = new ArrayList<Integer>()//Ok
2- List<Integer> list = new List<Integer>()//compilation error
3- List<List> list = new ArrayList<List>()//Warning
4- List<Integer> list = new List<Integer>()//Compilation error
4

6 に答える 6

4

Listですinterface

ArrayListというクラスですimplements List

List複数の実装を持つことができる単なるコントラクトと考えてください ( ArrayList, LinkedList)

于 2013-10-17T04:16:30.737 に答える
2
  1. ArrayListインスタンス化できるクラスです。ということで、1で問題ありません。
  2. Listインターフェースです。インターフェイスをインスタンス化できません。そのため、2 と 4 でコンパイル エラーが発生します。
于 2013-10-17T04:16:40.580 に答える
2

あなたはJavaにとても慣れていないようです。その理由は、List がインターフェースだからです。インターフェイスの定義が表示された場合、それをインスタンス化することはできません。ArrayList は、インスタンス化できる List インターフェイスの実装です。

于 2013-10-17T04:18:08.080 に答える
0

Listjava.util.collectionパッケージ内のインターフェースです。インターフェイスをインスタンス化することはできません。

ArrayList は List インターフェイスの具体的な実装です。

ArrayList implements List
于 2013-10-17T04:19:55.620 に答える
0

オブジェクト指向プログラミングでは、実際には存在しないものを独自に作成することができます。List はその 1 つで、インターフェイスです。インターフェースは実際にはコードで何もしていませんが、約束または契約として機能します。

リストを作成するにはさまざまな方法があります。特定のアプリケーションでは遅い方法もあれば、速い方法もあります。最も一般的な 2 つは ArrayList と LinkedList です。ArrayList は配列内のリストをバックアップし、非常に高速なインデックス作成をサポートします。位置 n のオブジェクトを非常に迅速に取得できます。LinkedList は、新しいオブジェクトの追加と削除が高速です (実際にはそうではありません。その理由はそれよりも少し深いところにあります)。場合によっては、一方が優れている場合もあれば、他方が優れている場合もあります。

したがって、リストを通過して各項目のデータを取得するメソッドを作成する場合、それらのリスト実装のいずれかの特別な機能に依存していません。どちらを選ぶべきですか?私が使用するものだと勝手に決めたという理由だけで、ユーザーに LinkedList から ArrayList を作成するよう強制する必要がありますか?

リストはここでの答えです。彼らがどのようにリストを作成したかについて、私は何の仮定もしていません。私がしているのは、すべてのリストにあるとわかっているいくつかの方法に依存しているだけなので、ユーザーを私に合わせさせません。しかし、List 自体にはインスタンス化するものは何もありません。new List() を呼び出すと、それは何を意味するのでしょうか? まあ、それは何の意味もありません。

しかし、あなたはすることができます

List<String> stringList = new ArrayList<String>()

何故ですか?「新しい」は、リスト、ArrayList の実際の実装で呼び出されています。これは一般的な使用法ではありませんが、リストの約束だけでなく、実際には実際のリストが背後にあるため、許可されています。

于 2013-10-17T04:27:27.840 に答える