1. Información general
En este rápido tutorial, vamos a discutir un común Excepción que puede ocurrir cuando se trabaja con un poco de la API de la mayoría Lista implementaciones - la UnsupportedOperationException .
Un java.util.List tiene más funciones que las que puede soportar un rray ordinario . Por ejemplo, con solo una llamada de método incorporada, es posible verificar si un elemento específico está dentro de la estructura. Normalmente, es por eso que a veces necesitamos convertir una matriz en una Lista o Colección .
Para obtener una introducción a la implementación principal de Java List , ArrayList , consulte este artículo.
2. UnsupportedOperationException
Una forma frecuente en la que ocurre este error es cuando usamos el método asList () de java.util.Arrays:
public static List asList(T... a)
Vuelve:
- una lista de tamaño fijo a partir del tamaño de una matriz dada
- un elemento del mismo tipo que el de la matriz original y debe ser un objeto
- elementos en el mismo ordencomo en la matriz original
- una lista que es serializable e implementa RandomAccess
Dado que T es un varargs , podemos pasar una matriz o los elementos directamente como parámetros, y el método creará una lista inicializada de tamaño fijo:
List flowers = Arrays.asList("Ageratum", "Allium", "Poppy", "Catmint");
También podemos pasar una matriz real :
String[] flowers = { "Ageratum", "Allium", "Poppy", "Catmint" }; List flowerList = Arrays.asList(flowers);
Dado que la Lista devuelta es una Lista de tamaño fijo , no podemos agregar / eliminar elementos .
Un intento de agregar más elementos causaría UnsupportedOperationException :
String[] flowers = { "Ageratum", "Allium", "Poppy", "Catmint" }; List flowerList = Arrays.asList(flowers); flowerList.add("Celosia");
La raíz de esta excepción es que el objeto devuelto no implementa la operación add () ya que no es lo mismo que java.util.ArrayList.
Es una ArrayList , de java.util.Arrays.
Otra forma de obtener la misma excepción es intentando eliminar un elemento de la lista obtenida.
Por otro lado, existen formas de obtener una Lista mutable en caso de que la necesitemos.
Uno de ellos es crear una ArrayList o cualquier tipo de lista directamente desde el resultado de asList () :
String[] flowers = { "Ageratum", "Allium", "Poppy", "Catmint" }; List flowerList = new ArrayList(Arrays.asList(flowers));
3. Conclusión
En conclusión, es importante entender que agregar más elementos a una lista puede ser problemático para más que listas inmutables.
Como siempre, el código fuente completo de los ejemplos está disponible en GitHub.