Kotlin 里面没有 static
方法的概念,它通过 object
声明单例对象的方法来让你使用 static
的代码。 比如:
object Boy {
fun next() {
println("构建单例测试")
}
}
这个 Boy.next()
就是一个静态的方法。 Kotlin 通过将他编译为一个单例对象的方式来实现静态。 这段代码放在 Java 里就需要这样调用:
public static void main(String[] args) {
//需要多出一个INSTANCE
Boy.INSTANCE.next();
}
于是为了保证java项目中简洁引用Kotlin定义的单例类,因此多出了@JvmStatic
注解,这样Kotlin编译器就会再生成一个静态方法,从而减少了INSTANCE的调用
object Boy {
@JvmStatic // 这个 annotation 是修饰在方法上的
fun next() {
println("构建单例测试")
}
}
如果没有 companion
关键字,编译器默认生成 INSTANCE
实例,如果有则是 COMPANION
实例 如下:
class SomeClass {
companion object {
@JvmStatic
fun someMethod() = Unit
}
}
java调用:
class JavaClass {
public static void main(String[] args) {
// 加上 JvmStatic 之前
SomeClass.COMPANION.someMethod()
// 之后
SomeClass.someMethod()
}
}