Intento agregar objetos a una List<String>
instancia pero arroja un UnsupportedOperationException
. ¿Alguien sabe por qué?
Mi código Java
String[] membersArray = request.getParameterValues('members');
List<String> membersList = Arrays.asList(membersArray);
for (String member : membersList) {
Person person = Dao.findByName(member);
List<String> seeAlso;
seeAlso = person.getSeeAlso();
if (!seeAlso.contains(groupDn)){
seeAlso.add(groupDn);
person.setSeeAlso(seeAlso);
}
}
El mensaje de error:
java.lang.UnsupportedOperationException java.util.AbstractList.add (fuente desconocida) java.util.AbstractList.add (fuente desconocida) javax.servlet.http.HttpServlet.service (HttpServlet.java:641) javax.servlet.http.HttpServlet.service (HttpServlet.java:722)
List<String> listMembres = new ArrayList<String>(Arrays.asList(tabMembres));
:)List
implementación que no permite la adición, deberá copiarloList
en una implementación que sí lo haga (ArrayList
es un candidato común) y agregarlo.Muchas de las implementaciones de List admiten un soporte limitado para agregar / eliminar, y Arrays.asList (membersArray) es uno de esos. Debe insertar el registro en java.util.ArrayList o usar el siguiente enfoque para convertirlo en ArrayList.
Con el mínimo cambio en su código, puede hacer lo siguiente para convertir una lista a ArrayList. La primera solución es tener un cambio mínimo en su solución, pero la segunda está más optimizada, supongo.
O
fuente
Forme el concepto de herencia, si algún método perticular no está disponible en la clase actual, buscará ese método en superclases. Si está disponible, se ejecuta.
Cuando está convirtiendo de una matriz a una colección Obejct. es decir, basado en matriz a API basada en colección, entonces le proporcionará un objeto de colección de tamaño fijo, porque el comportamiento de la matriz es de tamaño fijo.
Muestras de salsa para conformación.
Forma la fuente anterior, puedes observar que la
java.util.Arrays.ArrayList
clase no@Override add(index, element), set(index, element), remove(index)
. Por lo tanto, de la herencia se ejecuta súperAbstractList<E>
clase deadd()
función que lanzaUnsupportedOperationException
.Como
AbstractList<E>
es una clase abstracta, proporciona la implementación aiterator() and listIterator()
. Entonces, podemos iterar sobre el objeto de la lista.Incluso puede crear la clase de forma de matriz de tamaño fijo.
Collections.unmodifiableList(list);
Fuente de muestra:
A
Collection
, a veces llamado contenedor, es simplemente un objeto que agrupa múltiples elementos en una sola unidad. Las colecciones se utilizan para almacenar, recuperar, manipular y comunicar datos agregados.@ver también
vs
HashTablefuente
Debe inicializar su Lista, vea también:
o
fuente
UnsupportedOperationException
enadd()
. En su lugar, obtendría un NPE.Lista membersList = Arrays.asList (membersArray);
devuelve una lista inmutable, lo que debe hacer es
nueva ArrayList <> (Arrays.asList (membersArray)); para hacerlo mutable
fuente
en lugar de usar add () podemos usar addall ()
add agrega un solo elemento, mientras que addAll agrega cada elemento de la colección uno por uno. Al final, ambos métodos devuelven verdadero si la colección ha sido modificada. En el caso de ArrayList, esto es trivial, porque la colección siempre se modifica, pero otras colecciones, como Set, pueden devolver false si los elementos que se agregan ya están allí.
fuente
No puede modificar un resultado de una consulta LDAP. Tu problema está en esta línea:
La lista seeAlso también es inmodificable.
fuente