如何在Kotlin中初始化最终字段?

Joh*_*nny 8 kotlin

假设我用private final String s(Java)或val s(Kotlin)声明了最后一个字段.在初始化期间,我想用调用远程服务的结果初始化该字段.在Java中,我可以在构造函数中初始化它(例如s = RemoteService.result()),但在Kotlin中我无法弄清楚如何做到这一点,因为据我所知,该字段必须在它声明的同一行中初始化.这里有什么解决方案?

Cor*_*ave 14

您可以val在init块中设置值:

class MyClass {

    val s: String

    init {
        s = "value"
    }

}
Run Code Online (Sandbox Code Playgroud)


fro*_*der 9

您还可以初始化值,by lazy并在第一次引用时初始化该值.一个例子

val s by lazy { RemoteService.result() }
Run Code Online (Sandbox Code Playgroud)

kotlin将从表达式的返回类型中猜出s的类型.