125 votes

"Instancier" une liste en Java ?

J'essaie 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 veut dire et pourquoi je ne peux pas initialiser une List de la même manière que je le ferais pour un ArrayList ?

179voto

Etienne de Martel Points 16020

En Java, List est un interface . C'est-à-dire qu'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).

Depuis ArrayList est une sorte de List vous pouvez facilement le diffuser :

List<T> mylist = new ArrayList<T>();

Ceci est en contraste avec .NET, où, depuis la version 2.0, List<T> est l'implémentation par défaut de la fonction IList<T> interface.

30voto

SLaks Points 391154

List est une interface, et non une classe concrète.
Une interface n'est qu'un ensemble de fonctions qu'une classe peut mettre en œuvre ; l'instanciation d'une interface n'a aucun sens.

ArrayList est une classe concrète qui implémente cette interface et toutes les méthodes qu'elle contient.

28voto

Eng.Fouad Points 44085

Utilisez List<Integer> list = new ArrayList<Integer>();

11voto

berry120 Points 21945

List est une interface et non une classe, elle ne peut donc pas être instanciée. ArrayList est très probablement ce que vous recherchez :

ArrayList<Integer> list = new ArrayList<Integer>();

Une interface en Java définit essentiellement un plan pour la classe - une classe implémentant une interface doit fournir des implémentations des méthodes définies par la liste. Mais l'implémentation réelle dépend entièrement de la classe qui l'implémente, ArrayList dans ce cas.

Le JDK fournit également LinkedList - une implémentation alternative qui se conforme à nouveau à l'interface de la liste. Son fonctionnement est très différent de celui de la méthode ArrayList En tant que tel, il a tendance à être plus efficace pour ajouter ou supprimer des éléments au milieu 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 parfaitement possible !

En bref, vous ne pouvez pas créer une liste parce qu'il s'agit d'une interface ne contenant pas de code concret - c'est le travail des classes qui implémentent cette liste, parmi lesquelles ArrayList est de loin le plus utilisé (et pour cause !).

Il convient également de noter qu'en C#, un fichier List est une classe, pas une interface - c'est IList . Le même principe s'applique cependant, mais avec des noms différents.

4voto

thasc Points 1288

A List n'est pas une chose réelle en Java. C'est une interface, une façon de définir comment un objet est autorisé à interagir avec d'autres objets. En tant que telle, elle ne peut jamais être instanciée. Un site ArrayList est une mise en œuvre de la List tout comme une liste chaînée, et ainsi de suite. Utilisez-les à la place.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X