Kotlin标准函数和静态方法

1 标准函数with、run和apply
with函数

接收两个参数:第一个参数可以是一个任意类型的对象,第二个参数是一个Lambda表达式。with函数会在Lambda表达式中提供第一个参数对象的上下文,并使用Lambda表达式中的最后一行代码作为返回值返回

1
2
3
4
val result = with(obj) {
// 这里是obj的上下文
"value" // with函数的返回值
}
run函数

的用法和使用场景其实和with函数是非常类似的,只是稍微做了一些语法改动而已。首先run函数通常不会直接调用,而是要在某个对象的基础上调用;其次run函数只接收一个Lambda参数,并且会在Lambda表达式中提供调用对象的上下文。其他方面和with函数是一样的,包括也会使用Lambda表达式中的最后一行代码作为返回值返回

1
2
3
4
val result = obj.run {
// 这里是obj的上下文
"value" // run函数的返回值
}
apply函数

和run函数也是极其类似的,都要在某个对象上调用,并且只接收一个Lambda参数,也会在Lambda表达式中提供调用对象的上下文,但是apply函数无法指定返回值,而是会自动返回调用对象本身

1
2
3
val result = obj.apply {
// 这里是obj的上下文
} // result == obj
2 静态方法
单例类

静态方法在某些编程语言里面又叫作类方法,指的就是那种不需要创建实例就能调用的方法,所有主流的编程语言都会支持静态方法这个特性。为Kotlin提供了比静态方法更好用的语法特性——单例类。

1
2
3
4
5
6
7
8
9
10
11
12
13
// Java
public class Util {
public static void doAction() {
System.out.println("do action");
}
}

// kotlin
object Util {
fun doAction() {
println("do action")
}
}
伴随类

希望让类中的某一个方法变成静态方法, 使用伴随对象

1
2
3
4
5
6
7
8
9
10
class Util {
fun doAction1() {
println("do action1")
}
companion object {
fun doAction2() {
println("do action2")
}
}
}
注解和顶层方法

确实需要定义真正的静态方法, Kotlin仍然提供了两种实现方式:注解和顶层方法。

注解

给单例类或companion object中的方法加上@JvmStatic注解,那么Kotlin编译器就会将这些方法编译成真正的静态方法

顶层方法

指那些没有定义在任何类中的方法,例如:main()方法。在Kotlin中所有的顶层方法都可以在任何位置被直接调用,不用管包名路径,也不用创建实例。在Java中使用文件名加方法调用。

1
2
3
4
5
6
7
8
9
10
11
// Kt文件 Helper.kt
fun doSomething(){}

//Kotlin中调用
fun main() {
doSomething()
}
//Java调用
public static void main(String args[]) {
HelperKt.doSomething();
}