Ich versuche, einer List<String>
Instanz Objekte hinzuzufügen, aber es wird eine ausgelöst UnsupportedOperationException
. Weiß jemand warum?
Mein Java-Code:
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);
}
}
Die Fehlermeldung:
java.lang.UnsupportedOperationException java.util.AbstractList.add (Unbekannte Quelle) java.util.AbstractList.add (Unbekannte Quelle) 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
Implementierung, die kein Hinzufügen zulässt, ein Element hinzufügen möchten, müssen Sie es in eine Implementierung kopieren,List
die dies tut (ArrayList
ein häufiger Kandidat ist), und es hinzufügen.Viele der List-Implementierungen unterstützen nur eingeschränkte Unterstützung für das Hinzufügen / Entfernen, und Arrays.asList (memberArray) ist eine davon. Sie müssen den Datensatz in java.util.ArrayList einfügen oder den folgenden Ansatz verwenden, um ihn in ArrayList zu konvertieren.
Mit der minimalen Änderung in Ihrem Code können Sie unten eine Liste in ArrayList konvertieren. Die erste Lösung hat eine minimale Änderung in Ihrer Lösung, aber die zweite ist vermutlich optimierter.
ODER
quelle
Bilden Sie das Vererbungskonzept. Wenn eine bestimmte Methode in der aktuellen Klasse nicht verfügbar ist, wird in Superklassen nach dieser Methode gesucht. Wenn verfügbar, wird es ausgeführt.
Wenn Sie von einem Array in ein Sammlungsobjekt konvertieren. Wenn Sie also eine Array-basierte oder eine sammlungsbasierte API verwenden, erhalten Sie ein Sammlungsobjekt mit fester Größe, da das Verhalten des Arrays eine feste Größe hat.
Quellenproben für die Konformation.
Wenn Sie die obige Quelle bilden, können Sie feststellen, dass diese
java.util.Arrays.ArrayList
Klasse dies nicht tut@Override add(index, element), set(index, element), remove(index)
. Also, von Vererbung führt es Super -AbstractList<E>
Klasse -add()
Funktion , die wirftUnsupportedOperationException
.Da
AbstractList<E>
es sich um eine abstrakte Klasse handelt, wird die Implementierung bereitgestelltiterator() and listIterator()
. Damit wir über das Listenobjekt iterieren können.Sie können sogar Array-Formulare mit fester Größe aus Sammlungen erstellen
Collections.unmodifiableList(list);
Beispielquelle:
A
Collection
- manchmal auch Container genannt - ist einfach ein Objekt, das mehrere Elemente zu einer Einheit zusammenfasst. Sammlungen werden zum Speichern, Abrufen, Bearbeiten und Kommunizieren aggregierter Daten verwendet.@siehe auch
vs
HashTablequelle
Sie müssen Ihre Liste initialisieren. Siehe auch:
oder
quelle
UnsupportedOperationException
inadd()
. Sie würden stattdessen eine NPE erhalten.Liste MembersList = Arrays.asList (MembersArray);
Gibt eine unveränderliche Liste zurück. Was Sie tun müssen, ist
neue ArrayList <> (Arrays.asList (membersArray)); um es veränderlich zu machen
quelle
Anstatt add () zu verwenden, können wir addall () verwenden.
add fügt ein einzelnes Element hinzu, während addAll jedes Element aus der Sammlung einzeln hinzufügt. Am Ende geben beide Methoden true zurück, wenn die Sammlung geändert wurde. Im Fall von ArrayList ist dies trivial, da die Auflistung immer geändert wird, andere Auflistungen wie Set jedoch möglicherweise false zurückgeben, wenn bereits hinzugefügte Elemente vorhanden sind.
quelle
Sie können ein Ergebnis einer LDAP-Abfrage nicht ändern. Ihr Problem liegt in dieser Zeile:
Die seeAlso-Liste kann nicht geändert werden.
quelle