Kotlin以声明作为表达

我们可以做的

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

但有没有办法做到这一点?

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

为了解决一个常见的情况,你创建一个对象并调用它的一些方法来初始化它的状态。

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

使用this值作为接收方调用指定的功能并返回this值。

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

用法示例:

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

你可以在这里参考许多其他的Kotlin成语。

你的第二个例子也可以工作 – 只要确保lambda返回正确的值(最后一个表达式的结果是with表达式的返回值):

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