我有一个这样的类:
class MyClass {
private val myLock = ReentrantLock()
...
}
在Java中,我会将此字段设为最终字段,以提供内存保证: https://stackoverflow.com/a/27254652/2674303个
val
美元也能提供同样的保证吗?
我有一个这样的类:
class MyClass {
private val myLock = ReentrantLock()
...
}
在Java中,我会将此字段设为最终字段,以提供内存保证: https://stackoverflow.com/a/27254652/2674303个
val
美元也能提供同样的保证吗?
是的,至少在Kotlin/JVM上是这样.对于其他平台来说,情况可能并非如此.
虽然我找不到有关这方面的权威文档(Kotlin/JVM规范仍未编写),但按照您的示例的方式声明的私有val
将编译为字节码中的final
字段.您可以通过判断.class文件来查看这一点.他们不太可能在future 改变这一点以生成非final
字段,因为正如您所指出的,final
字段有一定的保证,而移除final
将是一个突破性的变化.
当然,如果val
没有后台字段(如val x get() = 1
),则不会生成任何字段.