两次这样的现场作业有什么区别?实际上,第一种方法看起来非常可读,但我在许多代码示例中遇到了第二种方法。
有什么特殊原因吗?
class Login {
var grantToken = GrantTokenRequest()
fun schema(schema: String) {
this.grantToken.schema = schema
}
}
class Login {
var grantToken = GrantTokenRequest()
fun schema(schema: String) = apply { this.grantToken.schema = schema }
}
Run Code Online (Sandbox Code Playgroud)
区别在于函数的返回类型schema
。
第一种方式返回Unit
。
第二种方法返回当前范围内的类型this
。\n在您的情况下,第二种方法将返回类型Login
,即此类的实例。
当您“配置对象”时,第二种方法更为惯用。来自Kotlin 文档关于 apply
\n\n\napply 的常见情况是对象配置。此类调用可以读作\xe2\x80\x9c将以下赋值应用于对象[并返回对象本身]。\xe2\x80\x9d
\n
第二种方法有用的原因之一是它使调用链成为可能。这种“返回此”方法链的总称是“流畅接口”。
\nval login = Login()\n .schema("...")\n .anotherFunctionOnLoginClass(...)\n .moreCallChaining(...)\n\n
Run Code Online (Sandbox Code Playgroud)\n附加说明:不需要在 lambdathis
内部使用,因为 apply 已经设置为Receiver。代码可以简化为apply
this
fun schema(schema: String) = apply { grantToken.schema = schema }\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
167 次 |
最近记录: |