Kotlin apply和with用法和区别

apply

apply 是 Kotlin 标准库中的一个函数,它允许你在对象上执行一系列操作,然后返回该对象自身。它的语法结构如下:

复制代码
fun <T> T.apply(block: T.() -> Unit): T

这个函数接受一个 lambda 表达式作为参数,该 lambda 表达式被应用于调用 apply 的对象,并可以在 lambda 中对对象进行任何操作。

  • 对象初始化和配置:apply 通常用于初始化一个对象并对其进行属性设置。例如:

    复制代码
     val person = Person().apply {
         name = "Alice"
         age = 25
         // 其他属性设置
     }
  • 对象转换和修改:apply 还可以用于对现有对象进行修改或转换

    复制代码
      val modifiedPerson = person.apply {
         age += 5
         // 其他属性修改
     }

上面的示例中,我们使用 apply 函数修改了现有的 person 对象的属性。这在需要对对象进行一系列修改时非常有用。总的来说,apply 函数提供了一个简洁而强大的方式来初始化和配置对象,使代码更易读、更具可维护性。

with

它的语法结构如下:

复制代码
fun <T, R> with(receiver: T, block: T.() -> R): R

这个函数接受两个参数:第一个是对象 receiver,第二个是 lambda 表达式 block。在 with 函数的作用域内,我们可以直接访问 receiver 对象中的属性和方法。

复制代码
data class Person(var name: String, var age: Int)

val person = Person("Alice", 25)
val result = with(person) {
    name = "Bob"
    age = 30
    "$name is $age years old."
}
println(person) // 输出:Person(name=Bob, age=30)
println(result) // 输出:Bob is 30 years old.

在上面的示例中,我们创建了一个 Person 对象,并使用 with 函数来对其进行属性设置和操作。在 with 的 lambda 表达式中,我们修改了对象的 name 和 age 属性。最后,将返回一个字符串,其中包含修改后的 name 和 age 属性值。

区别

with 函数和 apply 函数在 Kotlin 中都用于在特定上下文中执行代码块,但它们有一些区别。

  • 作用对象:

    with 函数的第一个参数是一个对象,并且该对象将成为 lambda 表达式内部的上下文对象。在 lambda 内部,可以直接访问该对象的属性和方法。

    apply 函数的作用对象是调用 apply 函数的对象本身。在 lambda 内部,可以直接访问调用 apply 的对象的属性和方法。

  • 返回值:

    with 函数的返回值是 lambda 表达式的结果。

    apply 函数的返回值是调用 apply 的对象本身。

相关推荐
爱勇宝几秒前
AI 都能写代码了,还要学计算机吗?
前端·后端·程序员
石像鬼₧魂石4 分钟前
【Y2Ksoft】四季贵州水世界乐园管理系统 —— 玻璃拟态 · 单文件HTML · 开箱即用
前端·html
涛涛ing7 分钟前
尤雨溪宣布:Vue 3.6 发布、Vue 4.0 启动、Vite 8 已落地
前端
李伟_Li慢慢9 分钟前
05-mini版材质
前端·three.js
学以智用12 分钟前
HTTP 请求头 Headers 完整详解
前端·后端
李伟_Li慢慢12 分钟前
03-threejs架构原理浅析
前端·three.js
cidy_9814 分钟前
Codex、Hermes、Claude 使用共享知识库的对比
前端
Highcharts15 分钟前
Highcharts 矩形树图 Treemap 示列|2025年多层级出口商品结构可视化
javascript·数据可视化
牧艺18 分钟前
浏览器 3D 交互实战:射线拾取、描边高亮与业务面板联动
前端·three.js·数据可视化
叉歪22 分钟前
为 UnoCSS 扩展无限色阶与主题换色
前端·css