125 votes

"Instanciation" d'une liste en Java?

Essayer d'utiliser le code suivant :

List list = new List();

Je reçois le message d'erreur suivant :

java.util.List est abstrait ; ne peut pas être instancié

Que signifie cela et pourquoi ne puis-je 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 une interface. Autrement dit, elle ne peut pas être instanciée directement.

Vous pouvez plutôt utiliser ArrayList qui est une implémentation de cette interface qui utilise un tableau comme support de stockage (d'où le nom).

Comme ArrayList est une sorte de List, vous pouvez facilement le convertir en amont :

List mylist = new ArrayList();

Cela contraste avec .NET, où, depuis la version 2.0, List est l'implémentation par défaut de l'interface IList.

30voto

SLaks Points 391154

List est une interface, pas une classe concrète.
Une interface n'est qu'un ensemble de fonctions qu'une classe peut implémenter ; il n'a aucun sens d'instancier une interface.

ArrayList est une classe concrète qui se trouve implémenter cette interface et toutes ses méthodes.

28voto

Eng.Fouad Points 44085

Utilisez List list = new ArrayList();

11voto

berry120 Points 21945

Liste est l'interface, pas une classe donc elle ne peut pas être instanciée. ArrayList est probablement ce que vous recherchez:

ArrayList liste = new ArrayList();

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 que la liste définit. Mais l'implémentation réelle dépend totalement de la classe implémentant, ArrayList dans ce cas.

Le JDK fournit également LinkedList - une implémentation alternative qui respecte également l'interface de liste. Il fonctionne très différemment de ArrayList en 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 parfaitement possible!

En bref, vous ne pouvez pas créer une liste car c'est une interface ne contenant aucun code concret - c'est le travail des classes qui implémentent cette liste, dont ArrayList est de loin la plus utilisée (et pour de bonnes raisons!)

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

4voto

thasc Points 1288

Une List n'est pas une vraie chose 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, 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