14

Java 内存模型(从 1.5 开始)将final字段与非final字段区别对待。特别是,如果this在构造过程中引用没有转义,final那么即使对象通过数据竞争对其他线程可用,对构造函数中字段的写入也保证在其他线程上可见。(不保证对非字段的写入final可见,因此如果您不正确地发布它们,另一个线程可能会看到它们处于部分构造的状态。)

是否有任何关于 Scala 编译器如何/是否为类创建final(而不是非final)支持字段的文档?我查看了语言规范并搜索了网络,但找不到任何明确的答案。(相比之下,@scala.volatile注释记录为将字段标记为volatile

4

3 回答 3

5

我翻阅了历史以找出更改的时间。

Scala 到 JVM 的投影不在语言规范中。

于 2010-03-17T13:47:34.800 回答
3

final您将某些内容声明为val. 任何可以修改引用的东西,例如 a var,都可以(显然)不在final下面。

这意味着也case classes包含最终字段(因为案例类构造函数的参数是隐式val的)

于 2010-03-17T12:59:07.280 回答
2

我已经在Scala 错误系统中为此提交了一个文档错误。

于 2010-03-28T17:48:15.067 回答