该字段旁边的“final”关键字代表什么?

m.a*_*icz 2 spring kotlin

在我正在使用的遗留代码中,我发现了以下内容:

@Autowired
final lateinit var controller: CustomController
Run Code Online (Sandbox Code Playgroud)

这个final关键字在这里是什么意思?

在 Kotlin 文档中,我找到了关于阻止覆盖开放类中方法的final关键字的简短描述,但没有关于字段的信息。另外 - 我发现线路所在的班级没有打开

Sid*_*ria 5

final属性或在科特林防止重写字段/方法的方法。话虽如此,Kotlin 默认情况下将属性或方法/函数视为最终的,除非由关键字 指定open。在您的情况下, final 关键字是多余的。

这是一个小的演示测试用例来说明相同的情况。

open class Parent {
    open val someValue = 0
    final val otherValue = 13 // redundant modifier 'final' warning in Android Studio
}

class Child : Parent() {
    override val someValue = 5
    // override val otherValue = 19 // compile error
}
Run Code Online (Sandbox Code Playgroud)

在 OOP 中有一个叫做Fragile Base Class的有趣问题,以及为什么像 Kotlin 这样的一些语言在默认情况下更喜欢 final。