Kotlin以声明作为表达

Yur*_*ish 18 kotlin

我们可以做的

val obj = Obj()
with (obj) {
    objMethod1()
    objMethod2()
}
Run Code Online (Sandbox Code Playgroud)

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

val obj = with(Obj()) {
    objMethod1()
    objMethod2()
}
Run Code Online (Sandbox Code Playgroud)

要解决创建对象并在其上调用几个方法来初始化其状态的常见情况.

hot*_*key 28

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

调用指定的功能,将this值作为其接收器并返回this值.

public inline fun <T> T.apply(block: T.() -> Unit): T { block(); return this }
Run Code Online (Sandbox Code Playgroud)

用法示例:

val obj = Obj().apply {
    objMethod1()
    objMethod2()
}
Run Code Online (Sandbox Code Playgroud)

你可以在参考文献中找到许多其他Kotlin习语.


And*_*s_D 7

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

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