不变模式要求

时间:2018-12-03 00:49:17

标签: java design-patterns

我正在使用java研究不可变模式,但我不理解以下两个要求:

  1. 访问属性的实例方法不得更改实例变量
  2. 确保不可变类的构造函数是唯一设置或修改实例变量的值的地方。

请为第一点举一个简单的例子。第二点,我不明白在变量为最终变量时如何通过构造函数修改变量?

2 个答案:

答案 0 :(得分:0)

这两点或多或少是在说同一件事。它们只是意味着,一旦对象已初始化,则不应更改它。

要使一个对象真正不可变,那么每个对象都是引用,也必须不能通过访问器方法进行修改。例如,isAuth类由String支持,该变量是可变的。但是,char[]类没有公开任何可用来更改其后备数组内容的方法。因此,String类可以被认为是不可变的。

关于最终变量-必须在某个地方设置变量。拥有最终无法设置的最终变量并没有太多用处。因此,构造函数是特殊情况,并允许设置标记为final的变量。

String

答案 1 :(得分:0)

您的问题的答案是防御性复制。此技术来自Joshua Bloch的“ Effective Java”。它已广为人知,因此您可以阅读hereelsewhere