谷歌的ImmutableList

时间:2014-03-13 20:20:58

标签: java immutability

我是immutablelist的新手,并尝试更好地理解它。据我所知,一旦你在对象中有不可变列表,它就无法修改。但是我在pojo中使用时有点困惑。

我可以将immutableList作为pojo的属性并定义它的getter / setter吗? 如果我这样做,那将会是什么意思。

1 个答案:

答案 0 :(得分:1)

你可以在POJO中使用它,是的。但是,对于集合和POJO,你应该小心。

如果你的不可变列表是一个实例字段,那么你应该怎么做:

// list is immutable
public List<X> getList() { return list; }
public void setList(final List<X> list) { this.list = ImmutableList.copyOf(list); }

通常,在bean代码中,使用非永久集合,您将看到:

// list is mutable -- DON'T DO THAT
public List<X> getList() { return list; }
public void setList(final List<X> list) { this.list = list; }

但这非常非常不安全:

  • 您返回对列表的引用;可以修改此引用(ImmutableList没有此问题!);
  • 您设置了对列表的新引用,也可以进行修改。

应该完成的是:

// list is mutable
public List<X> getList() { return Collections.unmodifiableList(list); }
public void setList(final List<X> list) { this.list = new ArrayList<>(list); }
相关问题