Essayer d'utiliser le code suivant:
List<Integer> list = new List<Integer>();
Je reçois le message d'erreur suivant:
Java.util.List
est abstrait; ne peut pas être instancié
Qu'est-ce que cela signifie et pourquoi ne puis-je pas initialiser un List
de la même manière que je le ferais avec un ArrayList
?
En Java, List
est un interface. Autrement dit, il ne peut pas être instancié directement.
Au lieu de cela, vous pouvez utiliser ArrayList
, qui est une implémentation de cette interface qui utilise un tableau comme magasin de sauvegarde (d'où son nom).
Puisque ArrayList
est une sorte de List
, vous pouvez facilement le convertir en amont:
List<T> mylist = new ArrayList<T>();
Cela contraste avec .NET, où, depuis la version 2.0, List<T>
est l'implémentation par défaut de l'interface IList<T>
.
List
est une interface, pas une classe concrète.
Une interface est simplement un ensemble de fonctions qu'une classe peut implémenter. cela n'a aucun sens d'instancier une interface.
ArrayList
est une classe concrète qui implémente cette interface et toutes les méthodes qu'elle contient.
Utiliser List<Integer> list = new ArrayList<Integer>();
List
est l'interface, pas une classe, elle ne peut donc pas être instanciée. ArrayList
est probablement ce que vous cherchez:
ArrayList<Integer> list = new ArrayList<Integer>();
Une interface dans Java définit essentiellement un plan pour la classe - une classe implémentant une interface doit fournir les implémentations des méthodes définies par la liste. Mais l'implémentation réelle dépend entièrement de la classe d'implémentation, ArrayList
dans ce cas.
Le JDK fournit également LinkedList
- une autre implémentation conforme à l'interface de liste. Cela fonctionne très différemment de la ArrayList
ci-dessous et, en tant que tel, il a tendance à être plus efficace pour ajouter/supprimer des éléments à mi-chemin de la liste, mais pour la grande majorité des cas d'utilisation, il est moins efficace. Et bien sûr, si vous voulez définir votre propre implémentation, c'est tout à fait possible!
En bref, vous ne pouvez pas créer de liste car il s’agit d’une interface ne contenant pas de code concret - c’est le travail des classes qui implémentent cette liste, dont ArrayList
est de loin le plus utilisé (et avec raison!)
Il est également intéressant de noter qu'en C # une List
est une classe, pas une interface - c'est IList
. Le même principe s'applique cependant, mais avec des noms différents.
Une List
n'est pas une chose réelle en Java. C'est une interface, un moyen de définir comment un objet est autorisé à interagir avec d'autres objets. En tant que tel, il ne peut jamais être instancié. Un ArrayList
est une implémentation de l'interface List
, tout comme une liste chaînée, etc. Utilisez ceux-là à la place.
Une List
dans Java est une interface qui définit certaines qualités qu'une "liste" doit avoir. Des implémentations de listes spécifiques, telles que ArrayList
implémentent cette interface et précisent le fonctionnement des différentes méthodes. Qu'essayez-vous d'accomplir avec cette liste? Très probablement, l'une des listes intégrées fonctionnera pour vous.