二、标准函数和静态函数
1 标准函数with、run、和apply
Kotlin的标准函数指的是Standard.kt文件中定义的函数。
1.1 with函数
val result = with(obj) {
//这里是obj的上下文
"value"//with函数的返回值
}
1
2
3
4
1.2 run函数
val result = obj.run {
//这里是obj的上下文
"value"//run函数的返回值
}
1
2
3
4
1.3 apply函数
val result = obj.apply {
//这里是obj的上下文
}
//result == obj
//intent启动activity可以使用apply
1
2
3
4
5
2 定义静态方法
Kotlin极度弱化了静态方法这个概念,提供了比静态方法更好用的语法特性,单例类。
object Util {
fun doAction() {
println("do action")
}
}
1
2
3
4
5
这里的doAction()方法不是静态方法,但是可以使用Util.doAction()的方法来调用。
但是使用单例类的写法会将整个类中的所有方法全部变成类似于静态方法的调用方式,如果只希望让类中的某一个方法变成静态方法的调用方式,可以使用companion object,如下
class Util {
fun doAction1() {
println("do action1.")
}
companion object {
fun doAction2() {
println("do action2.")
}
}
}
1
2
3
4
5
6
7
8
9
10
11
doAction1()方法是一定要先创建Util类的实例才能调用,而doAction2()方法可以直接使用Util.doAction2()的方式调用。
但是doAction2()方法也不是静态方法,companion object这个关键字实际上会在Util类的内部创建一个伴生类,而doAction2()方法就是定义在这个伴生类里面的实例方法,只是Kotlin会保证Util类始终只会存在一个伴生对象,因此调用Util.doAction2()方法实际是调用了Util类中伴生类对象的doAction2()方法。
如果需要定义真正的静态方法,Kotlin提供了两种实现方式:注解和顶层方法。
注解
给单例类或companion object中的方法加上@JvmStatic注解,Kotlin编译器就会将这些方法编译成真正的静态方法,如下
class Util {
fun doAction1() {
println("do action1.")
}
companion object {
@JvmStatic
fun doAction2() {
println("do action2.")
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
此时Java和Kotlin中都可以使用Util.doAction2()的写法来调用了。
注意:@JvmStatic注解只能加在单例类或companion object中的方法上。
顶层方法
顶层方法是指没有定义在任何类中的方法。
创建一个文件,编写以下方法
fun doSomething() {
println("do something.")
}
1
2
3
在Kotlin中,可以在任何位置直接调用,输入doSomething()即可。在Java代码中,创建的文件取名比如叫Helper,Kotlin编译器会自动创建一个叫HelperKt的Java类,doSomething()方法就是以静态方法的形式定义在HelperKt类里,所以在Java中使用HelperKt.doSomething()的写法来调用
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/bp1907/article/details/122333471