Kotlin以声明作为表达

时间:2016-10-21 17:24:39

标签: kotlin

我们可以做到

val obj = Obj()
with (obj) {
    objMethod1()
    objMethod2()
}

但是有办法做到这一点吗?

val obj = with(Obj()) {
    objMethod1()
    objMethod2()
}

解决一个常见的情况,即创建一个对象并在其上调用几个方法来初始化它的状态。

2 个答案:

答案 0 :(得分:27)

当然,您可以使用.apply { } stdlib函数,

  

使用this值作为接收器调用指定的函数 block 并返回this值。

public inline fun <T> T.apply(block: T.() -> Unit): T { block(); return this }

用法示例:

val obj = Obj().apply {
    objMethod1()
    objMethod2()
}

你可以在许多其他Kotlin习语here in the reference中找到它。

答案 1 :(得分:6)

您的第二个示例也有效 - 只需确保lambda返回正确的值(最后一个表达式的结果是with表达式的返回值):

val obj = with(Obj()) {
   objMethod1()
   objMethod2()
   this   // return 'this' because we want to assign the new instance to obj
}