Liste Java UnsupportedOperationException
1. Vue d'ensemble
Dans ce rapide didacticiel, nous aborderons unException courant qui peut se produire lorsque vous travaillez avec certaines API de la plupart des implémentations deList - lesUnsupportedOperationException.
Unjava.util.List a plus de fonctionnalités qu'unrray ordinaire ne 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 la raison pour laquelle nous devons parfois convertir unarray enList ouCollection.
Pour une introduction à l'implémentation principale de JavaList - lesArrayList - veuillez vous référer àto this article.
2. UnsupportedOperationException
Cette erreur se produit fréquemment lorsque nous utilisons la méthodeasList() dejava.util.Arrays:
public static List asList(T... a)
Il retourne:
-
unList de taille fixe à partir de la taille d'unarray donné
-
un élément du même type que celui desarray d'origine et il doit s'agir d'unObject
-
éléments dans le même ordre as dans le tableau d'origine
-
une liste qui estserializable et implémenteRandomAccess
Puisque T est unvarargs, 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 unarray réel:
String[] flowers = { "Ageratum", "Allium", "Poppy", "Catmint" };
List flowerList = Arrays.asList(flowers);
Since the returned List is a fixed-size List, we can’t add/remove elements.
Une tentative pour ajouter plus d'éléments entraîneraitUnsupportedOperationException:
String[] flowers = { "Ageratum", "Allium", "Poppy", "Catmint" };
List flowerList = Arrays.asList(flowers);
flowerList.add("Celosia");
La racine de ceException est que l’objet renvoyé n’implémente pas l’opérationadd() car il n’est pas le même quejava.util.ArrayList.
C'est unArrayList, dejava.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 unList mutable au cas où nous en aurions besoin.
L'une d'elles consiste à créer unArrayList ou tout type de liste directement à partir du résultat deasList():
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 d'éléments supplémentaires à une liste peut être problématique pour plus que de simples listes immuables.
Comme toujours, le code source complet des exemples est disponibleover on GitHub.