考虑以下课程:
class Foo
{
private List<Integer> all;
private Set<Integer> distinct;
public List<Integer> getAll()
{
return all;
}
public void add(Integer i)
{
all.add(i);
distinct.add(i);
}
}
我不希望bar
被修改为:
foo.getAll().add(3);
相反,我想强制我自己的add()
程序
有没有办法做到这一点?
答案 0 :(得分:4)
您可以getAll()
返回unmodifiable list。你可以认为它就像它返回一个视图一样,所以列表只能处于只读模式。
任何试图修改返回列表的调用都会抛出UnsupportedOperationException
。
public List<Integer> getAll(){
return Collections.unmodifiableList(all);
}