Je ne peux pas initialiser une liste comme dans le code suivant:
List<String> supplierNames = new List<String>();
supplierNames.add("sup1");
supplierNames.add("sup2");
supplierNames.add("sup3");
System.out.println(supplierNames.get(1));
Je fais face à l'erreur suivante:
Impossible d'instancier le type
List<String>
Comment puis-je instancier List<String>
?
Si vous vérifiez le API pour List
, vous remarquerez qu'il est écrit:
Interface List<E>
Être un interface
signifie qu'il ne peut pas être instancié (aucune new List()
n'est possible).
Si vous vérifiez ce lien, vous trouverez quelques class
es qui implémentent List
:
Toutes les classes d'implémentation connues:
AbstractList
,AbstractSequentialList
,ArrayList
,AttributeList
,CopyOnWriteArrayList
,LinkedList
,RoleList
,RoleUnresolvedList
,Stack
,Vector
Ceux-ci peuvent être instanciés. Utilisez leurs liens pour en savoir plus sur eux, I.E: pour savoir lequel correspond le mieux à vos besoins.
Les 3 les plus couramment utilisés sont probablement:
List<String> supplierNames1 = new ArrayList<String>();
List<String> supplierNames2 = new LinkedList<String>();
List<String> supplierNames3 = new Vector<String>();
Prime:
Vous pouvez également l'instancier avec des valeurs, de manière plus simple, à l'aide de la variable Arrays
class
, comme suit:
List<String> supplierNames = Arrays.asList("sup1", "sup2", "sup3");
System.out.println(supplierNames.get(1));
Mais notez que vous n'êtes pas autorisé à ajouter d'autres éléments à cette liste, car il s'agit de fixed-size
.
Impossible d'instancier une interface, mais il y a peu d'implémentations:
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"));
De plus, il existe de nombreux autres moyens fournis par d’autres bibliothèques comme Guava.
List<String> list = Lists.newArrayList("one", "two", "three");
La liste est un Interface, vous ne pouvez pas instancier une interface, car interface est une convention, quelles méthodes doivent avoir vos classes. Pour instancier, vous avez besoin de quelques réalisations (implémentations) de cette interface. Essayez le code ci-dessous avec les implémentations très populaires de l'interface List:
List<String> supplierNames = new ArrayList<String>();
ou
List<String> supplierNames = new LinkedList<String>();
Vous devrez utiliser ArrayList<String>
ou autre.
List<String>
est une interface.
Utilisez ceci:
import Java.util.ArrayList;
...
List<String> supplierNames = new ArrayList<String>();
La liste est une interface et vous ne pouvez pas initialiser une interface. Instanciez une classe d'implémentation à la place.
Comme:
List<String> abc = new ArrayList<String>();
List<String> xyz = new LinkedList<String>();
Dans la plupart des cas, vous voulez un simple ArrayList
- une implémentation de List
Avant la version 7 du JDK
List<String> list = new ArrayList<String>();
JDK 7 et plus tard, vous pouvez utiliser l'opérateur diamant
List<String> list = new ArrayList<>();
Des informations complémentaires sont écrites ici documentation Oracle - Collections
La liste n'est qu'une interface, une définition d'une liste générique. Vous devez fournir une implémentation de cette interface de liste. Les deux plus courants sont:
ArrayList - une liste implémentée sur un tableau
List<String> supplierNames = new ArrayList<String>();
LinkedList - une liste implémentée comme une chaîne d'éléments interconnectés
List<String> supplierNames = new LinkedList<String>();
Si vous voulez juste créer un immuable List<T>
avec seulement un objet, vous pouvez utiliser cette API:
List<String> oneObjectList = Collections.singletonList("theOnlyObject”);
Plus d'infos: docs
En fonction du type de liste que vous souhaitez utiliser, quelque chose comme
List<String> supplierNames = new ArrayList<String>();
devrait vous y aller.
List est l'interface, ArrayList est une implémentation de l'interface List. Vous trouverez plus d'implémentations pouvant mieux répondre à vos besoins en lisant le JavaDocs de l'interface List .
La liste est une interface. Vous ne pouvez pas utiliser List pour l'initialiser.
List<String> supplierNames = new ArrayList<String>();
Ce sont quelques unes des classes impelementées de List,
ArrayList, LinkedList, Vector
Vous pouvez utiliser tout cela selon vos besoins. Ces classes ont chacune leurs propres caractéristiques.
Juste au cas où, quiconque resterait encore sur cette question. Parce que, je vois un ou deux nouveaux utilisateurs qui posent à nouveau la même question et tout le monde qui le dit, Non, vous ne pouvez pas le faire, chère Prudence , à part Toutes les réponses données ici, je voudrais fournir des informations supplémentaires - Oui, vous pouvez réellement le faire, Liste liste = new List (); Mais au prix de l’écriture des implémentations de toutes les méthodes d’Interfaces. La notion n'est pas simplement List list = new List (); mais
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;
}
..... et ainsi de suite (Je ne peux pas écrire toutes les méthodes.)
Ceci est un exemple de classe anonyme. C'est correct quand quelqu'un dit, Non, vous ne pouvez pas instancier une interface, et c'est vrai. Mais vous ne pouvez jamais dire, Vous pouvez écrire Liste de liste = nouvelle Liste (); mais, évidemment, vous pouvez le faire et c'est une déclaration difficile à faire que vous pouvez ne fais pas .
Nous avons créé soyuz-to pour simplifier un problème: comment convertir X
en Y
(par exemple, String
en Integer
). Construire un objet est aussi une sorte de conversion, il a donc une fonction simple: Map
, List
, Set
:
import io.thedocs.soyuz.to;
List<String> names = to.list("John", "Fedor");
S'il vous plaît vérifier - il a beaucoup d'autres fonctionnalités utiles