При изучении Collection
API, мы находим что некоторые методы (add
, remove
...) может бросить a java.lang.UnsupportedOperationException
если текущая реализация Набора не поддерживает те технические возможности.
Есть ли, на самом деле, в JDK, бетоне Collection
это не поддерживает те методы?
Большое спасибо за Ваши ответы.
Очевидными примерами являются реализации, возвращенные, скажем, из Collections.unmodifiableCollection ()
и других подобных методов. Методы, изменяющие коллекцию
, вызывают это исключение.
Да. Например, когда вы вызываете Collections.unmodifiableList (list)
, возвращаемый список не поддерживает add (..)
Эти коллекции, однако, в основном являются частными классами, которые не отображаются в API, поэтому вы не можете их создать.
Помимо коллекций, возвращаемых методами Collections.unmodifiable *
, есть еще пара интересных случаев, когда UnsupportedOperationException Фактически выбрасывается
:
Map
, доступ к которым осуществляется через entrySet ()
, keySet ()
и значения ( )
может иметь элементы, удаленные, но не добавленные, Arrays.asList
, не может содержать ни добавленных, ни удаленных элементов, Методы Collections.empty *
и Collections.singleton *
также помечены как "неизменяемые" , поэтому - хотя это явно не указано в документации API - я полагаю, что эти бросают исключение также при попытках их изменения.