java list exception arraylist unsupportedoperation

Java List.add() UnsupportedOperationException



arraylist (3)

Intento agregar objetos a una instancia List<String> pero arroja una excepción UnsupportedOperationException . ¿Alguien sabe por qué?

Mi código de 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(Unknown Source) java.util.AbstractList.add(Unknown Source) javax.servlet.http.HttpServlet.service(HttpServlet.java:641) javax.servlet.http.HttpServlet.service(HttpServlet.java:722)


Debe inicializar su Lista, vea también:

List<String> seeAlso = new Vector<String>();

o

List<String> seeAlso = new ArrayList<String>();


No puede modificar un resultado de una consulta LDAP. Tu problema está en esta línea:

seeAlso.add(groupDn);

La lista seeAlso no se puede modificar.


No todas las implementaciones de List admiten el método add() .

Un ejemplo común es la List devuelta por Arrays.asList() : está documentado que no admite ninguna modificación estructural (es decir, eliminar o agregar elementos) (énfasis mío):

Devuelve una lista de tamaño fijo respaldada por la matriz especificada.

Incluso si esa no es la List específica que está tratando de modificar, la respuesta aún se aplica a otras implementaciones de la List que son inmutables o solo permiten algunos cambios seleccionados.

Puede obtener más información leyendo la documentación de UnsupportedOperationException y List.add() , que documenta que se trata de una "(operación opcional)". El significado preciso de esta frase se explica en la parte superior de la documentación de la List .

Como solución, puede crear una copia de la lista para una implementación modificable conocida como ArrayList :

seeAlso = new ArrayList<>(seeAlso);