小工具知识网

当前位置: 首页 > 行业知识 > Kotlin:常用标准库函数(let、run、with、apply、also)

行业知识

Kotlin:常用标准库函数(let、run、with、apply、also)

2026-11-05 07:28:09 来源:互联网转载

一、let 扩展函数

Kotlin标准库函数let可用于范围确定和空检查。当调用对象时,let执行给定的代码块并返回其最后一个表达式的结果。对象可以通过引用(默认情况下)或自定义名称在块中访问。

let扩展函数源码

let.kt文件代码

fun main() {    println("isEmpty = $isEmpty")    printNonNull(null)    printNonNull("my string")    printIfBothNonNull("First","Second")    //下面是运行结果    //test    //isEmpty = false    //Printing "null":    //Printing "my string":    //my string    //    //First : Second}val isEmpty = "test".let {    println(it)               // 2    it.isEmpty()}fun printNonNull(str:String?){    println("Printing \"$str\":")    str?.let {        print("\t")        println(it)        println()    }}fun printIfBothNonNull(strOne: String?, strTwo: String?) {    strOne?.let { firstString ->        strTwo?.let { secondString ->            println("$firstString : $secondString")            println()        }    }}

运行结果

二、run 扩展函数

与let类似,run是标准库中的另一个作用域函数。基本上,它做同样的事情:执行一个代码块并返回其结果。

不同的是,在内部运行对象是通过this访问的。当您想要调用对象的方法而不是将其作为参数传递时,这是很有用的。

run扩展函数源码

run.kt文件代码

fun getNullableLength(ns: String?) {    println("for \"$ns\":")    val resutl = ns?.run {        println("\tis empty? " + isEmpty())        println("\tlength = $length")        length    }//返回最后一行    println("resutl = $resutl")}fun main(){    getNullableLength(null)    getNullableLength("")    getNullableLength("some string with Kotlin")//下面是运行结果    //for "null":    //resutl = null    //for "":    //is empty? true    //length = 0    //resutl = 0    //for "some string with Kotlin":    //is empty? false    //length = 23    //resutl = 23}

运行结果

三、with函数

With是一个非扩展函数,可以简洁地访问其参数的成员:在引用其成员时,可以省略实例名。

with函数源码

with.kt文件代码

fun main() {    val personal = Personal("test", 20)    val withResult = with(personal) {        println("name = $name")        println("age = $age")        21        22    }    println("withResult = $withResult")    //name = test    //age = 20    //withResult = 22}class Personal(var name: String, var age: Int)

运行结果

四、apply扩展函数

apply在对象上执行代码块并返回对象本身。在块内部,对象被this引用。这个函数对于初始化对象很方便。

在实际项目用来显示列表数据的RecyclerView.Adapter里onBindViewHolder方法里使用apply或with函数较多

apply扩展函数源码

apply.kt文件代码

fun main() {    val jake = Person()    val stringDescription = jake.apply {        name = "Jake"        age = 30        about = "Android developer"    }.toString()    println("stringDescription  = $stringDescription")    //stringDescription  = Person(name=Jake, age=30, about=Android developer)}class Person() {    var name: String? = null    var age: Int = 20    var about: String? = null    override fun toString(): String {        return "Person(name=$name, age=$age, about=$about)"    }}

运行结果

五、also扩展函数

它也像apply一样工作:它执行一个给定的块并返回被调用的对象。在块内部,对象被它引用,所以它更容易作为参数传递。这个函数可以方便地嵌入其他操作,比如在调用链中登录。

also扩展函数源码

also.kt文件代码

fun main() {    val jake = Person2().also {        println(it)    }    getPerson().also {        it.token?.let { tempToen -> login(tempToen) }    }}class Person2(    var name: String = "test",    var age: Int = 0,    var about: String? = null) {    var token: String? = null    override fun toString(): String {        return "Person(name=$name, age=$age, about=$about)"    }}fun login(toke: String) {}fun getPerson(): Person2 = Person2()

运行结果

推荐

Kotlin: 协程的四种启动模式(CoroutineStart)

上一篇:文件服务器怎么访问?

下一篇:服务器怎么改成硬盘?