2012-11-15 4 views
269

私は、次のコードのようにリストを初期化できません:私は次のエラーに直面リスト<String>オブジェクトをJavaで初期化するには?

List<String> supplierNames = new List<String>(); 
supplierNames.add("sup1"); 
supplierNames.add("sup2"); 
supplierNames.add("sup3"); 
System.out.println(supplierNames.get(1)); 

を:

Cannot instantiate the type List<String>

どのように私はList<String>をインスタンス化することができますか?

答えて

531

あなたがチェックした場合の相互接続されたチェーンのように実装一覧 - 配列

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

LinkedListの上に実装リストの場合はAPIと表示されます。

Interface List<E> 

interfaceは、インスタンス化できないことを意味します(new List()は可能ではありません)。

あなたがそのリンクをチェックする場合は、Listを実装するいくつかのclass ESを見つけることができます:

All Known Implementing Classes:

AbstractList , AbstractSequentialList , ArrayList , AttributeList , CopyOnWriteArrayList , LinkedList , RoleList , RoleUnresolvedList , Stack , Vector

ものをインスタンス化することができます。それらのリンクを使用して、それらの詳細を知ることができます。I.E:あなたのニーズに合ったものを知る。

3つの最も一般的に使用されるものは、おそらく、次のとおりです。

List<String> supplierNames1 = new ArrayList<String>(); 
List<String> supplierNames2 = new LinkedList<String>(); 
List<String> supplierNames3 = new Vector<String>(); 

ボーナス:次のように
あなたはまた、Arraysclassを使用して、簡単な方法で、値とそれをインスタンス化することができます

List<String> supplierNames = Arrays.asList("sup1", "sup2", "sup3"); 
System.out.println(supplierNames.get(1)); 

ただし、fixed-sizeのように、そのリストに他の要素を追加することはできません。

+1

Arrays.asListは素晴らしいですが、気づいたはずであるように、 'int [] [= 1,2,3}; System.out.println(Arrays.asList(a)); // [[I @ 70cdd2] ' –

+1

@ J.A.I.L。それは起こっていることではありません。これは1つの要素のリストです.1つの要素はintの配列です。必要な振る舞いはおそらく3つの要素1、2、3のリストでした。 –

+1

@ChristofferHammarströmリストまたは配列を出力するには、java.util.Arrays.toString(array);を使用できます。この機能は既に与えられています.. – Maxr1998

11

ArrayList<String>などを使用する必要があります。

List<String>はインターフェイスです。

使用この:

import java.util.ArrayList; 

... 

List<String> supplierNames = new ArrayList<String>(); 
9

一覧はインターフェイスで、インターフェイスを初期化できません。代わりに実装クラスをインスタンス化します。

同様:

List<String> abc = new ArrayList<String>(); 
List<String> xyz = new LinkedList<String>(); 
33

一覧はインターフェイスあるインターフェースが慣例であるので、あなたはあなたのクラスを持っているべきメソッド、インターフェースをインスタンス化することはできません。インスタンス化するには、そのインタフェースの実現(実装)が必要です。あなたを取得する必要があり、

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

または

List<String> supplierNames = new LinkedList<String>(); 
5

使用するリストの種類に応じて、

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

のようなものを:Listインタフェースの非常に人気の実装に以下のコードを試してみてください行く。

Listはインターフェイスです.ArrayListはListインターフェイスの1つの実装です。あなたのニーズに合ったより多くの実装は、JavaDocs of the List interfaceを読んで見つけることができます。

5

リストはインターフェイスです。リストを使用して初期化することはできません。

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

これらは、リストの一部は、あなたがあなたの要件ごとに、このいずれかを使用することができ、クラス、

ArrayList, LinkedList, Vector 

をimpelementedています。これらの各クラスには独自の機能があります。

+0

[this](http://www.javapractices.com/topic/TopicAction.do?Id=65)や[ここ](http://stackoverflow.com/questions/1792134/)のようなVectorのdiscorageの使用a-colleague-said-dont-use-java-util-vector-anymore-why-not)を使用します。スレッドの問題のため –

8

リストは単なるインタフェースであり、一般的なリストの定義です。このリストインターフェースの実装を提供する必要があります。二つの最も一般的なのは、次のとおりです。

ArrayListの - 要素

List<String> supplierNames = new LinkedList<String>(); 
7

は、ほとんどの場合、あなたは欲しいシンプルArrayList - JDKのバージョンの前にList

の実装7

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

JDK 7以降あなたはダイヤモンドのオペレータに

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

さらに情報を使用することができますここに書かれていますOracle documentation - Collections

1

あなたはそれだけオブジェクトで不変List<T>を作成したい場合は、このAPIを使用することができます。

List<String> oneObjectList = Collections.singletonList("theOnlyObject”); 

さらに詳しい情報:docs

3

JDK2

List<String> list = Arrays.asList("one", "two", "three"); 

JDK7

//diamond operator 
List<String> list = new ArrayList<>(); 
list.add("one"); 
list.add("two"); 
list.add("three"); 

JDK8

List<String> list = Stream.of("one", "two", "three").collect(Collectors.toList()); 

JDK9

List<String> list = List.of("one", "two", "three"); 

プラスグアバのような他のライブラリが提供するその他の方法はたくさんあります。

0

この場合、いずれかの人がまだこの質問の周りに残っています。同じ質問をもう一度聞いている1人または2人の新しいユーザーがいるので、いいえ、あなたはそれを行うことはできません。親愛なる親愛、ここに挙げたすべての回答を除いて、私は追加情報を提供したいのですが - はいあなたは実際に行うことができますリストリスト=新しいリスト(); しかし、インターフェイスのすべてのメソッドの実装を書くのは犠牲です。 概念は単純にListではありません。list = new List();しかし

List<Integer> list = new List<Integer>(){ 

     @Override 
     public int size() { 
      // TODO Auto-generated method stub 
      return 0; 
     } 

     @Override 
     public boolean isEmpty() { 
      // TODO Auto-generated method stub 
      return false; 
     } 

     @Override 
     public boolean contains(Object o) { 
      // TODO Auto-generated method stub 
      return false; 
     } 

.....というように(カントは、すべてのメソッドを記述します。)

これは匿名クラスの一例です。誰かが言ったときにその正しい、いいえあなたはインターフェイスをインスタンス化できません、とそうです。しかし、あなたは言うことができませんあなたCANTを書くリストリスト=新しいリスト();しかし、明らかにあなたはそれを行うことができます。にはができないようにすることは難しい声明です。

関連する問題