Kotlin的伴生对象(companion object)在语法上类似于Java中的静态方法,所以很多人也都是这样用的。本文将向你展示伴生对象的工作方式和在Kotlin中创建静态方法的推荐做法。
伴生对象 Companion Objects
是一个在类内部声明的用 companion 关键字标记的对象。在语法上它类似于Java中的静态方法:你可以通过类名调用对象内的成员。
代码一般是这样的:
// 声明
class KCompanion {
companion object{
fun getBongs(nTimes: Int) {
for (i in 1 .. nTimes) {
print("BONG ")
}
}
}
}
// 调用
KCompanion.getBongs()
相当简单对吧!即使伴生对象的成员在其他语言中看起来像是静态成员,在运行时他们仍然是真实对象的成员实例。
我们看看代码编译后发生了什么:
public final class KCompanion {
...
public static final class Companion {
public final void getBongs(int nTimes) {
...
}
}
}
一个额外的?Companion? 类 被创建出来了。如何避免创建这个类呢?我们可以使用全局函数来实现我们的需求。
全局函数
创建一个kotlin文件 Bong.kt, 然后写我们想要作为静态的项目各处都可访问的方法:
fun getBongs(nTimes: Int) {
for (i in 1 .. nTimes) {
print("BONG ")
}
}
fun someOtherMethod() {
print("BONG ")
}
这样就可以直接访问包可见函数,不需要使用任何限定符:
// 调用全局函数
getBongs(5)
我们看看这段代码编译后的代码是什么样的:
public final class BongKt {
public static final void getBongs(int nTimes) {
...
}
public static final void someOtherMethod() {
...
}
}
可以看到,编译后的代码没有创建额外的类。
总结:如果可以的话,当你想使用伴生对象 companion object 时,考虑使用全局函数替代~
|