Я пытаюсь добавить объекты в List<String>
экземпляр, но он выбрасываетUnsupportedOperationException
. Кто-нибудь знает почему?
Мой код 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);
}
}
Сообщение об ошибке:
java.lang.UnsupportedOperationException java.util.AbstractList.add (неизвестный источник) java.util.AbstractList.add (неизвестный источник) 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
, который не допускает добавление, вам придется скопироватьList
его в реализацию, которая делает (ArrayList
является общим кандидатом), и добавить к этому.Многие из реализации List поддерживают ограниченную поддержку для добавления / удаления, и одним из них является Arrays.asList (membersArray). Вам необходимо вставить запись в java.util.ArrayList или использовать приведенный ниже подход для преобразования в ArrayList.
С минимальными изменениями в вашем коде, вы можете сделать ниже, чтобы преобразовать список в ArrayList. Первое решение имеет минимальные изменения в вашем решении, но второе, я думаю, более оптимизировано.
ИЛИ
источник
Сформируйте концепцию наследования. Если какой-либо перикулярный метод недоступен в текущем классе, он будет искать этот метод в суперклассах. Если доступно, оно выполняется.
Когда вы конвертируете из массива в коллекционный объект. то есть, на основе массива к API на основе коллекции, то он предоставит вам объект коллекции фиксированного размера, потому что поведение массива имеет фиксированный размер.
Образцы соусов для конформации.
Из вышеприведенного источника вы можете наблюдать, что
java.util.Arrays.ArrayList
класс этого не делает@Override add(index, element), set(index, element), remove(index)
. Итак, от наследования он выполняет суперAbstractList<E>
классadd()
функцию , которая бросаетUnsupportedOperationException
.Так как
AbstractList<E>
абстрактный класс, он обеспечивает реализацию дляiterator() and listIterator()
. Так что мы можем перебирать объект списка.Вы даже можете создать массив массивов фиксированного размера из класса Collections
Collections.unmodifiableList(list);
Источник выборки:
Collection
- иногда называемый контейнером - это просто объект, который группирует несколько элементов в одну единицу. Коллекции используются для хранения, извлечения, обработки и передачи сводных данных.@смотрите также
vs
HashTableисточник
Вы должны инициализировать свой список, см. Также:
или
источник
UnsupportedOperationException
вadd()
. Вы бы получили NPE вместо этого.List membersList = Arrays.asList (membersArray);
возвращает неизменный список, что вам нужно сделать, это
новый ArrayList <> (Arrays.asList (membersArray)); сделать его изменчивым
источник
вместо использования add () мы можем использовать addall ()
add добавляет один элемент, а addAll добавляет каждый элемент из коллекции один за другим. В конце оба метода возвращают true, если коллекция была изменена. В случае ArrayList это тривиально, поскольку коллекция всегда изменяется, но другие коллекции, такие как Set, могут возвращать false, если добавляемые элементы уже существуют.
источник
Вы не можете изменить результат из запроса LDAP. Ваша проблема в этой строке:
Список seeAlso также не подлежит изменению.
источник