我们可以做到
val obj = Obj()
with (obj) {
objMethod1()
objMethod2()
}
但是有办法做到这一点吗?
val obj = with(Obj()) {
objMethod1()
objMethod2()
}
解决一个常见的情况,即创建一个对象并在其上调用几个方法来初始化它的状态。
答案 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
}