前言
该博客是《第一行代码》第三版第3章关于Kotlin部分的笔记
Kotlin标准函数和静态方法
一、标准函数with、run和apply
(一)with
- with函数接收2个参数:第一个参数可以是任意的对象,第二个参数是一个Lambda表达式。
- with函数会在Lambda表达式中提供第一个对象的上下文,并使用Lambda表达式中的最后一行代码作为返回值返回。示例代码如下:
val result = with(obj) {
// 这里是obj的上下文
"value" //with函数的返回值
}
- with函数的作用:在连续调用同一个对象的多个方法时,with函数可以让代码变得更加精简,如:
val list = listOf("apple", "banana", "orange", "pear")
val result = with(StringBuilder()) {
append("start eating fruits.\n")
for(fruit in list) {
append(fruit).append("\n")
}
append("Ate all fruits.")
toString()
}
println(result)
(二)run
run函数的用法和使用场景其实和with函数是非常类似的,只是稍微做了一些语法改动而已。
- run函数不能直接调用,而是一定要调用某个对象的run函数才行
- run函数只接收一个Lambda参数,并且会在Lambda表达式中提供调用对象的上下文
- 其他方面和with函数一样
示例代码如下:
val result = obj.run {
// 这里是obj的上下文
"value" // run函数的返回值
}
(三)apply
apply函数和run函数极其类似,但apply函数无法指定返回值,而是会自动返回调用对象本身。
val result = obj.apply {
// 这里是obj的上下文
}
// result == obj
二、定义静态方法
在kotlin中编写工具类,建议使用单例类
object Util {
fun doAction() {}
}
在kotlin中想要定义静态方法,应该使用companion object
class Util {
fun doAction1() {}
companion object {
fun doAction2() {}
}
}
注意:companion object这个关键字实际上会在Util内部创建一个伴生类,而doAction2()方法就是定义在这个伴生类的实例方法。只是Kotlin会保证Util类始终只存在一个伴生类对象,因此调用Util.doAction2()方法实际上就是调用了Util类中伴生对象的doAction2()方法
@JvmStatic
如果我们给单例类或companion object中的方法加上@JvmStatic注解,那么Kotlin会将这些方法编译成真正的静态方法
顶层方法
顶层方法指的是那些没有定义在任何类中的方法,Kotlin编译器会将所有的顶层方法编译成静态方法。
- 在Kotlin中,直接调用这个顶层方法即可
- 在Java中,会生成一个“文件名Kt的类”,如,Helper.kt中有一个doSomething方法,可以调用HelperKt.doSomething()