我有一门课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 编码人员)解释这种行为背后的逻辑以及如何捕获该异常?