【发布时间】:2021-08-29 15:40:43
【问题描述】:
Java 规范提到,只有 final 字段的类的构造函数与读取对该对象的任何引用的任何线程处于 happens-before 关系:换句话说,不可能应用程序来查看部分构造的对象。
Scala 通过将初始化提取到单独的方法来破解初始化,以确保在超类中的任何初始化代码之前设置“主构造函数 vals”。这至少是 Scala final val 不总是(或曾经?)转换为 Java final 字段的一个原因。
- 有没有办法实现这一点,即确保类客户端与其构造函数之间的happens-before关系?
- 哪个是编译器相当稳定的特性?
- 哪个不是用Java写的类?
【问题讨论】:
标签: scala final java-memory-model happens-before