欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > Kotlin标准函数(语法糖)let with run also apply快速讲解

Kotlin标准函数(语法糖)let with run also apply快速讲解

2024/10/26 13:26:03 来源:https://blog.csdn.net/m0_74837900/article/details/140421116  浏览:    关键词:Kotlin标准函数(语法糖)let with run also apply快速讲解

目录

1、知识储备——扩展函数

原理

定义扩展函数

调用扩展函数

2、返回值为上下文对象的标准函数

apply

also

3、返回值为Lambda表达式结果

let

run

with

4、一表总结


1、知识储备——扩展函数

原理

Kotlin 在不继承父类或实现接口下,也能扩展一个类的新功能

定义扩展函数

fun 类A.扩展方法(参数):返回值类型 { }

调用扩展函数

val 新对象 =  类A()
val 获取返回值 = 新对象.扩展方法(传参数)

2、返回值为上下文对象的标准函数

apply

  • 对象引用为this(可省略)
  • 返回对象本身
  • 系统自带的扩展函数
    val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape")val result = StringBuilder().apply {append("Start eating fruits. \n")for (fruit in list) {append(fruit).append("\n")}append("Ate all fruits.")}

讲解:这里创建一个集合,StringBuilder对象创建后调用apply函数,StringBuilder相关方法直接调用即可,或this.方法名调用也可;最后这个对象整体返回给result变量

also

  • 对象引用为it(可自定义,但是不可省略)
  • 返回对象本身
  • 系统自带的扩展函数
    val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape")val result = StringBuilder().also {append("Start eating fruits. \n")for (fruit in list) {it.append(fruit).append("\n")}it.append("Ate all fruits.")}
//或者自定义引用val result = StringBuilder().also {temp->append("Start eating fruits. \n")for (fruit in list) {temp.append(fruit).append("\n")}temp.append("Ate all fruits.")}

讲解:与apply最大区别就是调用自身方法或属性,需要用it或自定义的名字来调用;最后也是将整体返回给result

3、返回值为Lambda表达式结果

let

  • 引用对象为it
  • 返回let函数最后一行非赋值语句值,否则返回Unit
  • 系统自带的扩展函数
//letResult接收Unit
val letResult:Int? = book.let { bookEntry: Book ->bookEntry.changePrice(100)bookEntry.name = "letResult"
}//letResult接收100
val letResult:Int? = book.let { bookEntry: Book ->bookEntry.changePrice(100)bookEntry.name = "letResult"100
}

run

  • 引用对象为this(可省略)
  • 返回run函数最后一行非赋值语句值,否则返回Unit
  • 系统自带的扩展函数
//输出结果:  修改完成  阿文2fun main() {val data = Data("阿文", 18)val reslut = data.run {name = "阿文2""修改完成"}println(reslut)println(data.name)
}

with

  • 引用对象为this(可省略)
  • 返回run函数最后一行非赋值语句值,否则返回Unit
  • 非扩展函数
val withResult = with(book) {changePrice(300)name = "withResult"this //也可以把这个对象作为返回值
}
println("withResult $withResult")

讲解:和run用法不同,但是引用对象和返回方式是一模一样的

4、一表总结

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com