525 Stimmen

Wie initialisiert man ein List<String>-Objekt in Java?

Ich kann eine Liste wie im folgenden Code nicht initialisieren:

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

Ich habe folgenden Fehler:

Der Typ kann nicht instanziiert werden List<String>

Wie kann ich instanziieren List<String> ?

887voto

J.A.I.L. Punkte 10166

Wenn Sie die API para List werden Sie feststellen, dass dort steht:

Interface List<E>

Sein ein interface bedeutet, dass es nicht instanziiert werden kann (keine new List() möglich ist).

Wenn Sie diesen Link aufrufen, finden Sie einige class es, die die List :

Alle bekannten implementierenden Klassen:

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

Einige davon können instanziiert werden (diejenigen, die nicht als abstract class ). Nutzen Sie die Links, um mehr über sie zu erfahren, z.B. um herauszufinden, was besser zu Ihren Bedürfnissen passt.

Die 3 am häufigsten verwendeten sind wahrscheinlich:

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

Bonus:
Sie können es auch einfacher mit Werten instanziieren, indem Sie die Arrays class wie folgt:

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

Beachten Sie jedoch, dass Sie dieser Liste keine weiteren Elemente hinzufügen dürfen, da sie fixed-size .

205voto

LazerBanana Punkte 6365

Eine Schnittstelle kann nicht instanziiert werden, aber es gibt nur wenige Implementierungen:

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

// creates immutable lists, so you can't modify such list 
List<String> immutableList = List.of("one", "two", "three");

// if we want mutable list we can copy content of immutable list 
// to mutable one for instance via copy-constructor (which creates shallow copy)
List<String> mutableList = new ArrayList<>(List.of("one", "two", "three"));

Außerdem gibt es viele weitere Möglichkeiten, die von anderen Bibliotheken bereitgestellt werden, wie Guave .

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

43voto

Doseke Punkte 861

Liste ist ein Schnittstelle Sie können eine Schnittstelle nicht instanziieren, denn Schnittstelle ist eine Konvention, welche Methoden Ihre Klassen haben sollten. Um eine Schnittstelle zu instanziieren, benötigen Sie einige Realisierungen (Implementierungen) dieser Schnittstelle. Versuchen Sie den folgenden Code mit sehr populären Implementierungen der Schnittstelle List:

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

oder

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

18voto

Ofir Farchy Punkte 7257

Sie müssen Folgendes verwenden ArrayList<String> oder dergleichen.

List<String> ist eine Schnittstelle.

Verwenden Sie dies:

import java.util.ArrayList;

...

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

15voto

Ankit Punkte 2993

List ist eine Schnittstelle, und man kann eine Schnittstelle nicht initialisieren. Instanzieren Sie stattdessen eine implementierende Klasse.

Wie:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X