Kotlin 却极度弱化了静态方法这个概念,非常推荐使用单例类的方式来实现。
kt
object Util {
fun doAction() {
println("do action")
}
}
虽然这里的doAction()
方法并不是静态方法,但是我们仍然可以使用Util.doAction()
的方式来调用,这就是单例类所带来的便利性。
不过,使用单例类的写法会将整个类中的所有方法全部变成类似于静态方法的调用方式。
如果我们只是希望让类中的某一个方法变成静态方法的调用方式该怎么办呢?这个时候就可以使用刚刚在最佳实践环节用到的companion object
了。
kt
class Util {
fun doAction1() {
println("do action1")
}
companion object {
fun doAction2() {
println("do action2")
}
}
}
不过,doAction2()
方法其实也并不是静态方法,companion object
这个关键字实际上会在Util
类的内部创建一个伴生类,而doAction2()
方法就是定义在这个伴生类里面的实例方法。只是Kotlin
会保证Util
类始终只会存在一个伴生类对象,因此,调用Util.doAction2()
方法,实际上就是调用了Util
类中伴生对象的doAction2()
方法。
由此可以看出,Kotlin 确实没有直接定义静态方法的关键字,但是提供了一些语法特性来支持类似于静态方法调用的写法。
如果你确确实实需要定义真正的静态方法,
注解
kt
companion object {
@JvmStatic
fun doAction2() {
println("do action2")
}
}
顶层方法
首先,需要创建一个Kotlin 文件。对着任意包名右击 → New → Kotlin File/Class ,在弹出的对话框中输入文件名即可。注意创建类型要选择File。
kt
fun doSomething() {
println("do something")
}
Kotlin 编译器会将所有的顶层方法全部编译成静态方法。
所有的顶层方法都可以在任何位置被直接调用,不用管包名路径,也不用创建实例,直接键入doSomething()即可。