在 Kotlin 中,**链式调用(Method Chaining)**的本质是:每个方法返回对象自身(或下一个可操作对象),从而可以连续调用多个方法。
下面从常见方式逐一说明。
class Person {
var name: String = ""
var age: Int = 0
fun setName(name: String): Person {
this.name = name
return this
}
fun setAge(age: Int): Person {
this.age = age
return this
}
}
fun main() {
val p = Person()
.setName("Tom")
.setAge(18)
println("${p.name}, ${p.age}")
}
✅ 关键点:
thisPerson)Kotlin 标准库已经内置了很好的链式调用支持。
apply(最像 Java Builder)data class Person(var name: String = "", var age: Int = 0)
val p = Person().apply {
name = "Tom"
age = 18
}
apply 返回 调用对象本身,非常适合初始化。
also(链式处理对象)val p = Person()
.also { it.name = "Tom" }
.also { it.age = 18 }
run(返回计算结果)val result = Person()
.run {
name = "Tom"
age = 18
"$name-$age"
}
class Dialog private constructor(
val title: String,
val message: String
) {
class Builder {
private var title = ""
private var message = ""
fun setTitle(title: String) = apply { this.title = title }
fun setMessage(msg: String) = apply { this.message = msg }
fun build() = Dialog(title, message)
}
}
val dialog = Dialog.Builder()
.setTitle("提示")
.setMessage("确定退出?")
.build()
✅ apply 是 Builder 模式的最佳搭档
fun person(block: Person.() -> Unit): Person {
return Person().apply(block)
}
val p = person {
name = "Tom"
age = 18
}
这种写法常用于:
fun setName(name: String) {
this.name = name
// 忘记 return this
}
这样就不能链式调用了。
| 方式 | 是否推荐 | 适用场景 |
|---|---|---|
| 返回 this | ✅ | 自定义链式 API |
| apply | ✅✅✅ | 初始化对象 |
| Builder | ✅ | 复杂对象构建 |
| DSL | ✅✅ | 框架 / 配置 |
如果你有具体业务场景(如网络请求、UI、配置),我可以直接帮你写一套链式调用示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。