Ответ 1
Очевидными примерами являются реализации, возвращаемые, скажем, Collections.unmodifiableCollection()
и другие подобные методы. Методы, которые изменяют значение Collection
, вызывают это исключение.
Изучая API Collection
, мы обнаруживаем, что некоторые методы (add
, remove
,...) могут вызывать java.lang.UnsupportedOperationException
, если текущая реализация коллекции не поддерживает эти функции.
Существует ли в JDK конкретный Collection
, который не поддерживает эти методы?
Большое спасибо за ваши ответы.
Очевидными примерами являются реализации, возвращаемые, скажем, Collections.unmodifiableCollection()
и другие подобные методы. Методы, которые изменяют значение Collection
, вызывают это исключение.
Помимо коллекций, возвращаемых методами Collections.unmodifiable*
, есть еще несколько интересных случаев, когда UnsupportedOperationException
фактически выбрасывается:
Map
, доступ через entrySet()
, keySet()
и values()
могут удалять элементы, но не добавлять,Arrays.asList
, могут быть добавлены и не удалены элементы,Collections.empty*
и Collections.singleton*
, также отмечены как "неизменяемые", поэтому - хотя это явно не указано в документах API - я полагаю, они также вызывают исключение при попытках измените их.Обычно, когда вы создаете список вроде List<String> sample=Collections.emptyList();
. Список sample
будет создан как Collections.unmodifiableCollection()
.
Таким образом, образец списка не поддерживает операции динамического списка. Вы можете назначить другой список только этому списку с помощью оператора присваивания. Eg >
List<String> ls=new ArrayList<String>();
ls.add("one");
ls.add("Three");
ls.add("two");
ls.add("four");
sample = ls;
Для операций с динамическим списком вы должны иметь синтаксис типа List<String> sample= new ArrayList<String>();
. В этом списке вы можете выполнить sample.add(), sample.addAll()
и т.д.
Да. Например, когда вы вызываете Collections.unmodifiableList(list)
, возвращенный список не поддерживает add(..)
Эти коллекции, однако, являются в основном частными классами, которые не подвергаются API, поэтому вы не можете их создавать.