【发布时间】:2013-06-25 09:46:30
【问题描述】:
我有一个课程 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 只会在该 for 循环内更改 - 一旦完成 getSomeList() 将返回良好的旧列表,因此不会保存任何更改。尝试调用 getSomeList().add("someString") 也会导致异常:UnsupportedOperationException。 请(向资深 C 编码人员)解释这种行为背后的逻辑以及如何捕获该异常?
【问题讨论】:
-
您没有显示足够的
SomeClass。在尝试调用add()时,我看不到UnsupportedOperationException的原因。 -
@jlordo:我已经添加了缺少的代码行(我认为)
-
这甚至不会编译...
标签: java list exception-handling iteration private