【Kotlin】静态方法

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()即可。

相关推荐
FunnySaltyFish11 小时前
什么?Compose 把 GapBuffer 换成了 LinkBuffer?
算法·kotlin·android jetpack
Kapaseker17 小时前
Compose 进阶—巧用 GraphicsLayer
android·kotlin
Kapaseker2 天前
实战 Compose 中的 IntrinsicSize
android·kotlin
A0微声z4 天前
Kotlin Multiplatform (KMP) 中使用 Protobuf
kotlin
alexhilton4 天前
使用FunctionGemma进行设备端函数调用
android·kotlin·android jetpack
lhDream4 天前
Kotlin 开发者必看!JetBrains 开源 LLM 框架 Koog 快速上手指南(含示例)
kotlin
RdoZam4 天前
Android-封装基类Activity\Fragment,从0到1记录
android·kotlin
Kapaseker5 天前
研究表明,开发者对Kotlin集合的了解不到 20%
android·kotlin
糖猫猫cc5 天前
Kite:两种方式实现动态表名
java·kotlin·orm·kite
如此风景6 天前
kotlin协程学习小计
android·kotlin