Kotlin中let、apply、also、with、run的使用与区别

一 概述

let

let()函数是一个扩展对象函数,一般用于对象的判空处理,函数块里面it代指该对象,最后一行或者return为返回的结果。

preson?.let{
	return 1
}

apply

apply函数块里面this代指该对象,并返回对象本身。适合进行对象的初始化或配置。

val list = mutableListOf(1, 2, 3).apply {  
    println("原列表:$this")  
    add(4)  
    println("修改后列表:$this")  
}  
println("最终列表:$list") // 输出:最终列表:[1, 2, 3, 4]

also

also()函数和let()函数相似,函数块里面it代指该对象,不同的是,返回的是对象本身。

val user = User("Alice").also {  
    it.age = 30  
    println("用户:${it.name}, 年龄:${it.age}")  
} 

with

with()函数是一个内联函数,它把传入的对象作为接受者,在该函数内可以使用this指代该对象来访问其公有的属性和方法。该函数的返回值为函数块最后一行或指定的return表示式。

val list = mutableListOf(1, 2, 3)  
val sum = with(list) {  
    println("原列表:$this")  
    var sum = 0  
    for (item in this) {  
        sum += item  
    }  
    sum  
}  
println("列表元素和:$sum") // 输出:列表元素和:6

run

with和let的结合体。它可以像with()函数一样直接在函数块中使用this指代该对象,也可以像let()函数一样为对象做统一的判空处理。

二 总结

函数体里面写的时候是it和this提示就可以区分,主要还是以下两点

  • 两个a开头的返回的是对象本身,其余的返回是return或者最后一行结果(lambda 表达式的结果)。
  • with是内联函数,其他的是扩展函数。

相关推荐

  1. Kotlinlet、apply、also、with、run使用区别

    2024-07-15 12:28:05       24 阅读
  2. kotlinsealed语句使用

    2024-07-15 12:28:05       50 阅读
  3. Kotlinobject关键字使用

    2024-07-15 12:28:05       56 阅读
  4. Linux字符串使用单引号双引号区别

    2024-07-15 12:28:05       51 阅读
  5. kotlin使用myibatis-pluslambdaQuery问题

    2024-07-15 12:28:05       28 阅读
  6. Kotlin委托

    2024-07-15 12:28:05       48 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-15 12:28:05       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-15 12:28:05       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-15 12:28:05       58 阅读
  4. Python语言-面向对象

    2024-07-15 12:28:05       69 阅读

热门阅读

  1. MyBatis的原理?

    2024-07-15 12:28:05       22 阅读
  2. node.js的安装及学习(node/nvm/npm的区别)

    2024-07-15 12:28:05       24 阅读
  3. 数据结构与算法 —— Transformers之Pipeline

    2024-07-15 12:28:05       22 阅读
  4. 每日新闻掌握【2024年7月15日 星期一】

    2024-07-15 12:28:05       26 阅读
  5. Ubuntu软件安装与卸载

    2024-07-15 12:28:05       21 阅读
  6. params和data的差别,doc下载

    2024-07-15 12:28:05       21 阅读
  7. 【Go系列】 Go的高并发模式

    2024-07-15 12:28:05       18 阅读