2015-09-21 7 views
0

Я искал javadoc из списка, чтобы найти способ, который позволяет заменять элемент (set (int, E)), и я увидел, что этот метод является «необязательным». Я искал какое-то время и нашел этот другой question с отличным ответом от Лоуренса Гонсалвеса.Работа со списком «Дополнительная операция»

Но у меня все еще есть вопрос, до сих пор каждый раз, когда я использовал какой-либо интерфейс, я никогда не ожидал, что реализация может вызвать исключение во время выполнения (если я не использовал его неправильно или если это была ошибка в коде реализации), хотя У меня было исключение, когда я случайно попытался добавить элементы в неизменный список, я не понял, что происходит.

Мой вопрос: если у меня есть метод API, который имеет параметр List (или какой-либо другой интерфейс), который должен вызывать «дополнительные» операции над этим объектом, как мне следует продолжить?

  • Следует ли избегать использования списка и использовать некоторую реализацию в качестве параметра?
  • Должен ли я сделать защитную копию списка, изменить его и вернуть, что список? (Это может изменить реализацию, используемый клиентом API)

Я знаю, что нужно изменить список полученных в качестве параметра в методе сомнителен, но может потребоваться

+0

Hi Jarrod. Я считаю, что это не дублирующий вопрос, я не спрашиваю, почему операция является необязательной, я спрашиваю, как с этим бороться. Я связал другой вопрос в своем собственном вопросе, который объясняет, почему он является факультативным, и, как я сказал в вопросе, я его прочитал ... –

ответ

2

Java- сами библиотеки последовательно отвечают на оба ваших вопроса «нет». Например, метод утилиты Collections.shuffle принимает любые List и генерирует исключение, если переданный ему List не поддерживает необходимые операции. В целом, придерживаясь такого поведения, совместимо с библиотеками Java и с преобладающей практикой разработки: продолжайте использовать и использовать List, как если бы он был изменен, и если кто-то переходит в , не поддерживая необходимые операции, они получат исключения они заслуживают.

+0

Ну, это имеет смысл, поэтому я в основном должен разъяснять в документации по методу, что список должен быть изменчивым ?! –

+0

нормально, что для «необязательных» операций операция может быть выполнена другим способом - например, удаление и вставка вместо замены элемента. Возможно, со значительными штрафными санкциями и, возможно, с нежелательными побочными эффектами. Вы можете подумать о том, чтобы поймать исключение и сделать операцию «резервной». Пока вы документируете то, что делает ваш метод в этих случаях, не должно быть проблемой. – DJClayworth

+0

@DJClayworth Я бы не ожидал, что это будет обычный случай - обычно я ожидал бы, что если бы был еще один способ поддержать операцию, даже неэффективную, то реализация будет идти вперед и использовать этот подход в методе. –

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