return Collections.unmodifiableList(b).iterator();
Мне кажется, это самый простой выход.Неизменяемое представление в вашем списке гарантирует, что полученный итератор не сможет изменить список, то есть метод remove
не будет работать и должен выдать исключение, UnsupportedOperationException
.
EDIT: Поскольку вы не можете изменить myMethod
, есть два варианта, или, на самом деле, варианты:
- Сделать
b
не изменяемым вообще.Конечно, это будет приемлемо, только если вам вообще не нужно вносить изменения в b
. - Сделать
b
неизменяемым представлением списка, которое можно изменить с помощью другого представлениятот же список.
Пример кода для 1., в Java 8 и более ранних версиях:
List<String> b = Collections.unmodifiableList(Arrays.asList("A", "B", "C"));
В Java 9 и более поздних версиях проще:
List<String> b = List.of("A", "B", "C");
List.of
создает неизменяемый список.
В случае, если полностью неизменяемый список не соответствует вашим требованиям, вот предложение для кода для опции 2.:
List<String> modifiableB = new ArrayList(Arrays.asList("A", "B", "C"));
List<String> b = Collections.unmodifiableList(modifiableB);
Now myMethod
получит доступ к b
, то есть к неизменяемому представлению, и, следовательно, создаст итератор, который не может удалить элементы, тогда как другие методы могут изменять от b
до modifiableB
.