У меня есть класс SomeClass
, в котором есть List<String> someList
. Мне нужно, чтобы другие классы перебирали элементы списка, но не позволяли им изменять список или элементы списка. Тестирование следующий код:Итерации за личный список вопросов
public class SomeClass {
static private List<String> someList;
public static List<String> getSomeList() {
return someList;
}
SomeClass(Array<String> someArray){
someList=Collections.unmodifiableList(Arrays.asList(someArray));
}
}
public class DoSomething {
for (String s : SomeClass.getSomeList()){
s+="Gotcha";
}
}
Будет показано, что S изменится только в том, что цикл - как только он закончил getSomeList() вернет хороший старый список, так что никаких изменений не будут сохранены. Также пытается вызвать getSomeList(). Add ("someString") приведет к исключению: UnsupportedOperationException. Пожалуйста, объясните (для ветерана C coder) логику этого поведения и как я поймаю это исключение?
Вы не показываете достаточно «SomeClass». Я не вижу причины для 'UnsupportedOperationException' при попытке вызвать' add() '. – jlordo
@jlordo: Я добавил недостающую строку кода (я думаю) –
Это даже не компилируется ... – jlordo