我正在阅读 Records 的文档
并且不理解“浅不可变”一词。浅不可变是什么意思?
如果它是不可变的,为什么我们需要一个复制构造函数?为什么有两个“Hello World!”?
对于所有记录类,以下不变量必须成立:如果记录 R 的组件是 c1、c2、... cn,那么如果记录实例被复制如下:
R copy = new R(r.c1(), r.c2(), ..., r.cn()); // copy constructor ?
那么肯定是
r.equals(copy)
.
最佳答案
浅不可变意味着,如果一个类有字段,这些字段被视为 final
.但是,它们的字段(即字段的字段)不需要是 final
.
您不需要实现构造函数,它已经为您实现了这种方式。但是如果你选择自己实现它,例如对于参数验证,那么这个不变量应该成立。
关于java - Java 14 记录文档中 "shallowly immutable"的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62057172/