功能编程手册(O'reilly):可变列表示例:正确或错误

时间:2017-09-19 13:17:58

标签: java list immutability mutable

我正在阅读Dean Wampler的Java Ovisionilly Java开发人员函数编程。

在第9页上,它使用了一个标题为:

的示例

请考虑以下示例,其中使用可变列表来保存客户的订单

public class Customer {

//No setter method

private final List <Order> orders;

public List <Order> getOrders() {return orders;}

public Customer (...) {...}

确定。

  1. 根据这本书,如果我将最终分配给List,则意味着它不会发生变异,因为它会阻止重新分配其值。

  2. (...)&amp;的含义是什么?的 {...}

  3. 非常感谢您提前解释。

2 个答案:

答案 0 :(得分:3)

你的解释错了或者这本书出错:

这个

private final List <Order> orders =....;

仅表示您不能像以后某处那样更改该引用

orders = new ArrayList<>();

但是列表可以肯定是变异的,因为你可以放置,删除和截断其内容

答案 1 :(得分:1)

according to the book, if I assign final to a List it means that it will not mutate because it prevents the reassignment of its value.

是的&#39;私人决赛&#39;意味着你无法改变价值。 这意味着你需要在变化时重新创建它。 这使得该类通过使用可变数据结构而不可变。

编辑:澄清一下,列表是可变的。该类是不可变的,因为列表是私有的和最终的,并且没有setter。这使得列表只读。

What its the meaning of (...) & {...}

三个点通常代表与示例无关的代码。

代码我们是Costumer构建的一个例子。

在这种情况下(...)是函数签名参数(这意味着有一些参数,但对于该示例并不重要。

{...}代表函数体,这又与示例无关。