Kotlin,设置一次 var/val 以使其成为最终版本,这可能吗

Ely*_*lye 5 final kotlin

在 Kotlin 中,我们val认为这是最终的,不能改变。例如

val something = "Something"
Run Code Online (Sandbox Code Playgroud)

如果稍后初始化的值,我们使用lateinit var.

lateinit var something: String
Run Code Online (Sandbox Code Playgroud)

但这var不是val. 我想设置一次(不是在构造函数中),并将其作为最终设置。我怎么能做到这一点?

Mak*_*oto 5

读入 Kotlin 的约定(一个最终的后期初始化变量)是不可能的。

考虑它的用例

通常,声明为非空类型的属性必须在构造函数中初始化。然而,这通常并不方便。例如,可以通过依赖项注入或在单元测试的设置方法中初始化属性。在这种情况下,您不能在构造函数中提供非 null 初始值设定项,但您仍然希望在引用类体内的属性时避免 null 检查。

lateinit var在处理可能尚未初始化的变量时提供相对的理智,例如注入字段的情况(如 Spring 和@Autowired)。然后,严格来说,在依赖注入的上下文中,如果您没有办法在编译时具体实例化变量,那么您不能将其保留为最终字段。

从 Java 到 Kotlin 世界,将后期初始化的变量作为 Final 引入看起来就像 Spring 中的这样自相矛盾:

@Autowired
private final Interface something;
Run Code Online (Sandbox Code Playgroud)