Java规范提到只有final
字段的类在发生时有它们的构造函数--在任何线程读取对该对象的引用之前:换句话说,应用程序不可能看到部分构造的对象。
Scala通过将它提取到不同的方法来实现初始化,以确保在超类中的任何初始化代码之前设置“主构造器”。这至少是为什么Scala final val
不总是翻译(或者从来没有翻译过?)的原因。转到Java final
字段。
发布于 2021-08-29 18:25:57
Scala通过将它提取到不同的方法来实现初始化,以确保在超类中的任何初始化代码之前设置“主构造器”。
在java中,只要final
不脱离构造函数,this
就不会破坏this
的保证。
(“不转义”意味着构造函数的代码不将this
存储在变量/集合/etc中,这些变量可以由另一个线程读取)
另外,由于JMM是为java语言定义的,而不是JVM,所以恐怕它只能在编译成java代码的语言中工作。
https://stackoverflow.com/questions/68974501
复制