Все Java Collection
s реализация Iterable
, поэтому они должны предоставить Iterator
, который указывает необязательный метод remove()
. Когда remove()
вызывается на Iterator
, он может отправить UnsupportedOperationException
.Как узнать, поддерживает ли Итератор коллекции remove()?
Как узнать, будет ли Collection
в стандартной библиотеке Java возвращать Iterator
, который поддерживает remove()
или не без кода запуска?
Конечно, я ожидал, что эта информация будет в Javadoc метода remove()
класса, но вместо этого найдет кучу ссылок на суперклассы и интерфейсы. Например: http://docs.oracle.com/javase/8/docs/api/java/util/TreeSet.html#iterator-- Я не нашел никаких пояснений, следуя ссылкам.
Единственный реальный способ - попробовать обработать исключение, я знаю, дерьмовый. API-интерфейс Collections не является самым элегантным API-интерфейсом проектирования, он не должен иметь никаких изменяемых и изменяемых версий большинства основных интерфейсов. – MadProgrammer
Если вы прочитали документацию на уровне класса для TreeSet, на которую вы ссылаетесь, это означает, что remove() действительно делает Работа. Было бы неплохо увидеть пример кода ... –
Ваш лучший выбор - прочитать javadoc. Например, 'Arrays.asList' говорит, что возвращенный список имеет фиксированный размер, поэтому вы можете себе представить, что его итератор не может удалить. Большинство «стандартных» коллекций изменяемы и позволяют удалить. – assylias