Liste Java UnsupportedOperationException

1. Vue d'ensemble

Dans ce tutoriel rapide, nous discuterons d'une exception courante qui peut se produire lorsque vous travaillez avec certaines API de la plupart des implémentations de List - l' exception UnsupportedOperationException .

Un java.util.List a plus de fonctionnalités qu'un rray ordinaire peut prendre en charge. Par exemple, avec un seul appel de méthode intégré, il est possible de vérifier si un élément spécifique se trouve à l'intérieur de la structure. C'est généralement pourquoi nous avons parfois besoin de convertir un tableau en liste ou collection .

Pour une introduction à l' implémentation principale de Java List - la ArrayList - veuillez vous référer à cet article.

2. UnsupportedOperationException

Cette erreur se produit fréquemment lorsque nous utilisons la méthode asList () de java.util.Arrays:

public static List asList(T... a)

Il renvoie:

  • une liste de taille fixe en fonction de la taille d'un tableau donné
  • un élément du même type que celui du tableau d' origine et il doit s'agir d'un objet
  • éléments dans le même ordrecomme dans le tableau d'origine
  • une liste sérialisable et implémentant RandomAccess

Puisque T est un varargs , nous pouvons passer un tableau ou les éléments directement en tant que paramètres, et la méthode créera une liste initialisée de taille fixe:

List flowers = Arrays.asList("Ageratum", "Allium", "Poppy", "Catmint");

Nous pouvons également passer un tableau réel :

String[] flowers = { "Ageratum", "Allium", "Poppy", "Catmint" }; List flowerList = Arrays.asList(flowers);

Puisque la liste renvoyée est une liste de taille fixe , nous ne pouvons pas ajouter / supprimer des éléments .

Une tentative d'ajout d'éléments supplémentaires entraînerait une exception UnsupportedOperationException :

String[] flowers = { "Ageratum", "Allium", "Poppy", "Catmint" }; List flowerList = Arrays.asList(flowers); flowerList.add("Celosia");

La racine de cette exception est que l'objet retourné n'implémente pas l' opération add () car ce n'est pas la même chose que java.util.ArrayList.

C'est une ArrayList , de java.util.Arrays.

Une autre façon d'obtenir la même exception consiste à essayer de supprimer un élément de la liste obtenue.

D'un autre côté, il existe des moyens d'obtenir une liste modifiable au cas où nous en aurions besoin.

L'un d'eux est de créer un ArrayList ou tout type de liste directement à partir du résultat de asList () :

String[] flowers = { "Ageratum", "Allium", "Poppy", "Catmint" }; List flowerList = new ArrayList(Arrays.asList(flowers));

3. Conclusion

En conclusion, il est important de comprendre que l'ajout de plus d'éléments à une liste peut être problématique pour plus que de simples listes immuables.

Comme toujours, le code source complet des exemples est disponible à l'adresse over sur GitHub.