Liste Java UnsupportedOperationException

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.