次のようにリストを初期化することはできません。
List<String> supplierNames = new List<String>();
supplierNames.add("sup1");
supplierNames.add("sup2");
supplierNames.add("sup3");
System.out.println(supplierNames.get(1));
私は次のようなエラーに直面します。
タイプ
List<String>
をインスタンス化できません
List<String>
をどのようにインスタンス化できますか?
API for List
を確認すると、次のように表示されます:
Interface List<E>
interface
であることは、インスタンス化できないことを意味します(new List()
は使用できません)。
そのリンクを確認すると、class
を実装するいくつかのList
esが見つかります。
すべての既知の実装クラス:
AbstractList
、AbstractSequentialList
、ArrayList
、AttributeList
、CopyOnWriteArrayList
、LinkedList
、RoleList
、RoleUnresolvedList
、Stack
、Vector
それらはインスタンス化できます。彼らのリンクを使って、それらについてもっと知りましょう。つまり、どれがあなたのニーズにより合っているかを知るためです。
最も一般的に使用される3つは、おそらく次のとおりです。
List<String> supplierNames1 = new ArrayList<String>();
List<String> supplierNames2 = new LinkedList<String>();
List<String> supplierNames3 = new Vector<String>();
ボーナス:
次のように、Arrays
class
を使用して、より簡単な方法で値でインスタンス化することもできます。
List<String> supplierNames = Arrays.asList("sup1", "sup2", "sup3");
System.out.println(supplierNames.get(1));
ただし、fixed-size
であるため、リストに要素を追加することはできません。
インターフェースをインスタンス化することはできませんが、実装はほとんどありません。
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");
さらに Guava のような他のライブラリによって提供される他の方法がたくさんあります。
List<String> list = Lists.newArrayList("one", "two", "three");
Listは Interface であり、interfaceは慣例であるため、どのメソッドがあなたのクラスを持つべきなのか、Interfaceをインスタンス化することはできません。インスタンス化するためには、そのインターフェースのいくつかの実現(実装)が必要です。リストインターフェースの非常に人気のある実装で以下のコードを試してください:
List<String> supplierNames = new ArrayList<String>();
または
List<String> supplierNames = new LinkedList<String>();
ArrayList<String>
などを使う必要があります。
List<String>
はインターフェースです。
これを使って:
import Java.util.ArrayList;
...
List<String> supplierNames = new ArrayList<String>();
リストはインタフェースであり、インタフェースを初期化することはできません。代わりに実装クラスをインスタンス化してください。
好きです:
List<String> abc = new ArrayList<String>();
List<String> xyz = new LinkedList<String>();
ほとんどの場合、シンプルなArrayList
- List
の実装が必要です。
JDKバージョン7より前
List<String> list = new ArrayList<String>();
JDK 7以降ではダイヤモンド演算子を使用できます
List<String> list = new ArrayList<>();
これ以上の情報はここに書かれています Oracleドキュメンテーション - コレクション
Listは単なるインタフェース、一般的なリストの定義です。このリストインターフェースの実装を提供する必要があります。最も一般的な2つは次のとおりです。
ArrayList - 配列に実装されたリスト
List<String> supplierNames = new ArrayList<String>();
LinkedList - 相互に連結された要素の連鎖のように実装されたリスト
List<String> supplierNames = new LinkedList<String>();
one オブジェクトのみを含む immutable List<T>
を作成するだけの場合は、次のAPIを使用できます。
List<String> oneObjectList = Collections.singletonList("theOnlyObject”);
より多くの情報: docs
どの種類のListを使いたいかに応じて、
List<String> supplierNames = new ArrayList<String>();
あなたは軌道に乗るべきです。
Listはインターフェース、ArrayListはListインターフェースの実装の1つです。 Listインタフェースの JavaDocs を読むことで、より自分のニーズに合った実装を見つけることができます。
リストはインタフェースです。あなたはそれを初期化するためにListを使うことができません。
List<String> supplierNames = new ArrayList<String>();
これらはListの未実装クラスの一部です。
ArrayList, LinkedList, Vector
あなたはあなたの要求に従ってこれのどれでも使うことができます。これらの各クラスには独自の機能があります。
念のために言っておきますが、この質問についてはまだ誰もが考えています。なぜなら、私は1人か2人の新しいユーザーが同じ質問をして、みんながそれを言っているのを見るので、いいえ、それはできません、親愛なる慎重さ、ここに与えられたすべての答えは別として、私は追加情報を提供したいと思います - はい、あなたは実際にすることができます、 List list = new List(); しかし、インタフェースのすべてのメソッドの実装を書くことを犠牲にして。概念は単に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がすべてのメソッドを書きます)
これは 匿名クラス の例です。誰かが言うとき、それは正しいです、 いいえ、あなたはインターフェースを具体化することができません、 そしてそれは正しいです。しかし、あなたは言うことはできません、 あなたはList list = new List()を書くことはできません。 しかし、明らかにあなたはそれを行うことができ、それはあなたがすることはできませんを作るのは難しい声明です。
soyuz-to を作成して、1つの問題を単純化しました:X
をY
に変換する方法(例:String
をInteger
)。オブジェクトの構築も一種の変換であるため、Map
、List
、Set
を構築する簡単な関数があります。
import io.thedocs.soyuz.to;
List<String> names = to.list("John", "Fedor");
それをチェックしてください-それは他の多くの便利な機能を持っています