温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

kotlin怎么实现链式调用

发布时间:2026-09-22 11:16:52 来源:亿速云 阅读:91 作者:小樊 栏目:编程语言

在 Kotlin 中,**链式调用(Method Chaining)**的本质是:每个方法返回对象自身(或下一个可操作对象),从而可以连续调用多个方法。

下面从常见方式逐一说明。


一、最基础的链式调用(返回 this)

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}")
}

✅ 关键点:

  • 方法返回 this
  • 返回类型通常是当前类(如 Person)

二、Kotlin 推荐写法:apply / also / run / let

Kotlin 标准库已经内置了很好的链式调用支持。

1️⃣ apply(最像 Java Builder)

data class Person(var name: String = "", var age: Int = 0)

val p = Person().apply {
    name = "Tom"
    age = 18
}

apply 返回 调用对象本身,非常适合初始化。


2️⃣ also(链式处理对象)

val p = Person()
    .also { it.name = "Tom" }
    .also { it.age = 18 }

3️⃣ run(返回计算结果)

val result = Person()
    .run {
        name = "Tom"
        age = 18
        "$name-$age"
    }

三、Builder 模式(经典链式调用)

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 模式的最佳搭档


四、DSL 风格链式调用(Kotlin 特色)

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、配置),我可以直接帮你写一套链式调用示例。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手