我正在使用java研究不可变模式,但我不理解以下两个要求:
请为第一点举一个简单的例子。第二点,我不明白在变量为最终变量时如何通过构造函数修改变量?
答案 0 :(得分:0)
这两点或多或少是在说同一件事。它们只是意味着,一旦对象已初始化,则不应更改它。
要使一个对象真正不可变,那么每个对象都是引用,也必须不能通过访问器方法进行修改。例如,isAuth
类由String
支持,该变量是可变的。但是,char[]
类没有公开任何可用来更改其后备数组内容的方法。因此,String
类可以被认为是不可变的。
关于最终变量-必须在某个地方设置变量。拥有最终无法设置的最终变量并没有太多用处。因此,构造函数是特殊情况,并允许设置标记为final的变量。
String
答案 1 :(得分:0)
您的问题的答案是防御性复制。此技术来自Joshua Bloch的“ Effective Java”。它已广为人知,因此您可以阅读here或elsewhere。