Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 谷歌';s不可变列表_Java_Immutability - Fatal编程技术网

Java 谷歌';s不可变列表

Java 谷歌';s不可变列表,java,immutability,Java,Immutability,我不熟悉immutablelist,并试图更好地理解它。据我所知,一旦在对象中有了不可变列表,它就不能被修改。但我有点困惑,因为它在pojo中使用 我可以将immutableList作为pojo的属性并定义它的getter/setter吗? 如果我这样做了,这意味着什么 您可以在POJO中使用它,是的。但是,对于集合和POJO,您通常应该小心 如果不可变列表是一个实例字段,则应执行以下操作: // list is immutable public List<X> getList()

我不熟悉immutablelist,并试图更好地理解它。据我所知,一旦在对象中有了不可变列表,它就不能被修改。但我有点困惑,因为它在pojo中使用

我可以将immutableList作为pojo的属性并定义它的getter/setter吗?
如果我这样做了,这意味着什么

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

如果不可变列表是一个实例字段,则应执行以下操作:

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

为什么?它是不变的。为什么要复制它?@b原因有二:1。你很可能有一个非不变的列表作为参数;2.如果检测到列表是
ImmutableList
的实例,那么这个静态工厂方法足够聪明,不会复制该列表。哦,哦,我没有注意到您没有要求不可变的输入。oops.感谢fge,在1个代码快照和第3个快照中,首选哪一个?如果您使用
ImmutableList
,选择1;但是,请注意,返回的集合将是不可变的:如果您需要调用方能够修改它,则必须更改代码。请参阅以了解使内容不可变的好处。
// list is mutable -- DON'T DO THAT
public List<X> getList() { return list; }
public void setList(final List<X> list) { this.list = list; }
// list is mutable
public List<X> getList() { return Collections.unmodifiableList(list); }
public void setList(final List<X> list) { this.list = new ArrayList<>(list); }