299 votes

Java List.add() UnsupportedOperationException (exception)

J'essaie d'ajouter des objets à un List<String> mais il jette une UnsupportedOperationException . Quelqu'un sait-il pourquoi ?

Mon code 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);
    }
}

Le message d'erreur :

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)

0voto

dwayne Points 11

Vous devez initialiser votre liste voir aussi :

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

ou

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

3 votes

Une variable non initialisée n'entraînera pas UnsupportedOperationException en add() . Vous obtiendrez un NPE à la place.

-3voto

nfechner Points 9402

Vous ne pouvez pas modifier le résultat d'une requête LDAP. Votre problème se situe dans cette ligne :

seeAlso.add(groupDn);

La liste seeAlso n'est pas modifiable.

1 votes

Le problème n'est pas dû à cela, mais comme Joachim l'a souligné plus haut, il est lié aux implémentations de List qui ne supportent pas add().

-4voto

Allen Points 21

Au lieu d'utiliser add() nous pouvons utiliser addall()

{ seeAlso.addall(groupDn); }

add ajoute un seul élément, tandis que addAll ajoute chaque élément de la collection un par un. Au final, les deux méthodes renvoient true si la collection a été modifiée. Dans le cas d'ArrayList, cela est trivial, car la collection est toujours modifiée, mais d'autres collections, comme Set, peuvent renvoyer false si les éléments ajoutés sont déjà présents.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X