2015-02-07 4 views
3

Все 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-- Я не нашел никаких пояснений, следуя ссылкам.

+0

Единственный реальный способ - попробовать обработать исключение, я знаю, дерьмовый. API-интерфейс Collections не является самым элегантным API-интерфейсом проектирования, он не должен иметь никаких изменяемых и изменяемых версий большинства основных интерфейсов. – MadProgrammer

+0

Если вы прочитали документацию на уровне класса для TreeSet, на которую вы ссылаетесь, это означает, что remove() действительно делает Работа. Было бы неплохо увидеть пример кода ... –

+0

Ваш лучший выбор - прочитать javadoc. Например, 'Arrays.asList' говорит, что возвращенный список имеет фиксированный размер, поэтому вы можете себе представить, что его итератор не может удалить. Большинство «стандартных» коллекций изменяемы и позволяют удалить. – assylias

ответ

4

Невозможно узнать этот ex-ante. Если не указано, что remove() поддерживается или не поддерживается (и, честно говоря, даже если он «правильно» документирован), ваш единственный способ узнать наверняка - попробовать.

+0

Мне любопытно о нисходящем. Какая часть этого ответа неверна в представлении DV? – Mureinik

0

Выбор структуры данных производится в соответствии с тем, что вы намерены поддерживать, поэтому к тому моменту, когда вы ее используете, вы, как разработчик, уже знаете, поддерживает ли базовая реализация удаление или нет.

Исключение будет выбрано, если фактическая реализация не соответствует вашему предположению/пониманию.

Смежные вопросы