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

时间:2016-06-13 14:21:59

标签: kotlin

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

4 个答案:

答案 0 :(得分:14)

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

class MyClass {

    val s: String

    init {
        s = "value"
    }

}

答案 1 :(得分:8)

您还可以使用by lazy初始化值,该值将在第一次被引用时初始化。一个例子

{{1}}

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

答案 2 :(得分:0)

自Kotlin首次正式稳定发行以来,就可以像这样简单地做到这一点:

class MyClass {
    val s = RemoteService.result()
}

答案 3 :(得分:0)

您可以使用run

class MyClazz {
    val prop = run {
        // do stuff
        // do stuff again
        123 // return expression
    }
}

来自docs(重点是我的):

<块引用>

除了在接收器对象上调用 run 之外,您还可以将其用作非扩展函数。 非扩展 run 允许您在需要表达式的情况下执行由多个语句组成的块。