List的类属性类型,不能由访问者修改

时间:2014-05-03 23:04:08

标签: java getter-setter accessor mutators

考虑以下课程:

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()程序 有没有办法做到这一点?

1 个答案:

答案 0 :(得分:4)

您可以getAll()返回unmodifiable list。你可以认为它就像它返回一个视图一样,所以列表只能处于只读模式。

任何试图修改返回列表的调用都会抛出UnsupportedOperationException

public List<Integer> getAll(){
    return Collections.unmodifiableList(all);
}