Próbuję dodać obiekty do List<String>
instancji, ale rzuca ona UnsupportedOperationException
. Czy ktoś wie dlaczego?
Mój kod 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);
}
}
Komunikat o błędzie:
java.lang.UnsupportedOperationException java.util.AbstractList.add (Nieznane źródło) java.util.AbstractList.add (Nieznane źródło) 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
implementacji, który nie pozwala na dodawanie, musisz skopiowaćList
go do implementacji, która to robi (ArrayList
jest typowym kandydatem) i dodać do tego.Wiele implementacji List obsługuje ograniczoną obsługę dodawania / usuwania, a Arrays.asList (MembersArray) jest jednym z nich. Musisz wstawić rekord do java.util.ArrayList lub zastosować poniższe podejście, aby przekonwertować na ArrayList.
Przy minimalnej zmianie w kodzie możesz zrobić poniżej, aby przekonwertować listę na ArrayList. Pierwsze rozwiązanie ma minimalną zmianę w twoim rozwiązaniu, ale chyba drugie jest bardziej zoptymalizowane.
LUB
źródło
Stwórz koncepcję dziedziczenia, jeśli jakaś metoda perticular nie jest dostępna w bieżącej klasie, będzie szukała tej metody w superklasach. Jeśli jest dostępny, wykonuje się.
Podczas konwertowania z tablicy na Collection Obejct. tzn. oparty na macierzy na interfejsie API opartym na kolekcji, to zapewni ci obiekt kolekcji o stałym rozmiarze, ponieważ zachowanie tablicy ma stały rozmiar.
Próbki soku do konformacji.
Z powyższego źródła można zauważyć, że
java.util.Arrays.ArrayList
klasa nie@Override add(index, element), set(index, element), remove(index)
. Tak więc, od dziedziczenia wykonuje on super-AbstractList<E>
klasyadd()
funkcji, która rzucaUnsupportedOperationException
.Jako
AbstractList<E>
klasa abstrakcyjna zapewnia implementację doiterator() and listIterator()
. Abyśmy mogli iterować obiekt listy.Możesz nawet utworzyć tablicę o stałej wielkości z klasy Kolekcje
Collections.unmodifiableList(list);
Przykładowe źródło:
ZA
Collection
- czasami nazywany kontenerem - to po prostu obiekt, który grupuje wiele elementów w jedną jednostkę. Kolekcje służą do przechowywania, pobierania, manipulowania i komunikowania danych agregowanych.@Zobacz też
vs
HashTableźródło
Musisz zainicjować swoją listę patrz również:
lub
źródło
UnsupportedOperationException
wadd()
. Zamiast tego dostałbyś NPE.List MembersList = Arrays.asList (MembersArray);
zwraca niezmienną listę, co musisz zrobić
new ArrayList <> (Arrays.asList (MembersArray)); aby było to możliwe
źródło
zamiast używać add () możemy użyć addall ()
add dodaje pojedynczy element, a addAll dodaje każdy element z kolekcji jeden po drugim. Ostatecznie obie metody zwracają wartość true, jeśli kolekcja została zmodyfikowana. W przypadku ArrayList jest to trywialne, ponieważ kolekcja jest zawsze modyfikowana, ale inne kolekcje, takie jak Set, mogą zwracać wartość false, jeśli dodawane elementy już tam są.
źródło
Nie można zmodyfikować wyniku z zapytania LDAP. Twój problem jest następujący:
Lista seeAlso jest niemodyfikowalna.
źródło