在Immutable类中创建一个字段`Final`?

Thi*_*ker 5 java immutability

最近我参加了一次采访.

有人问我怎么上课Immutable.

我告诉他答案.

但后来他问我为什么这些田地final

我回答说,用户不会意外地更改字段的值,如果他这样做,将给编译器错误.

现在他问我有一个immutable只有getter方法的类.

然后在这个班级有什么用final

我无法回答.他说这背后有一个原因.

有人可以解释一下吗?

Jak*_*b H 6

来自Effective Java:

让所有领域最终.这清楚地以系统强制执行的方式表达您的意图.此外,如果对新创建的实例的引用在没有同步的情况下从一个线程传递到另一个线程,则必须确保正确的行为,如内存模型中所述.

  • 澄清一下,`final` 保证在构造函数完成之前完全初始化一个字段。编译器可以对构造函数内部的操作重新排序,它们可以在创建对象引用并且构造函数完成之后发生 (2认同)