Kotlin中没有static关键字。
static
static在 Kotlin中表示 Java 方法的最佳方式是什么?
您将函数放在“伴侣对象”中。
所以java代码是这样的:
class Foo { public static int a() { return 1; } }
会变成
class Foo { companion object { fun a() : Int = 1 } }
然后,您可以在 Kotlin 代码中将其用作
Foo.a();
但是在 Java 代码中,您需要将其称为
Foo.Companion.a();
(这也适用于 Kotlin。)
如果您不喜欢指定Companion位,您可以添加@JvmStatic注释或命名您的同伴类。
Companion
@JvmStatic
从文档:
伴随对象 类中的对象声明可以用companion 关键字标记: class MyClass { companion object Factory { fun create(): MyClass = MyClass() } } 可以通过简单地使用类名作为限定符来调用伴生对象的成员: val instance = MyClass.create() … 但是,在 JVM 上,如果您使用@JvmStatic 注解,您可以将伴随对象的成员生成为真正的静态方法和字段。有关更多详细信息,请参阅Java 互操作性部分。
类中的对象声明可以用companion 关键字标记:
companion
class MyClass { companion object Factory { fun create(): MyClass = MyClass() } }
可以通过简单地使用类名作为限定符来调用伴生对象的成员:
val instance = MyClass.create()
…
但是,在 JVM 上,如果您使用@JvmStatic 注解,您可以将伴随对象的成员生成为真正的静态方法和字段。有关更多详细信息,请参阅Java 互操作性部分。
添加@JvmStatic注释看起来像这样
class Foo { companion object { @JvmStatic fun a() : Int = 1; } }
然后它将作为一个真正的 Java 静态函数存在,可以从 Java 和 Kotlin 中以Foo.a().
Foo.a()
如果只是不喜欢它的Companion名称,那么您还可以为伴生对象提供一个显式名称,如下所示:
class Foo { companion object Blah { fun a() : Int = 1; } }
这将让您以相同的方式从 Kotlin 调用它,但从 java 中调用它Foo.Blah.a()(这也将在 Kotlin 中工作)。
Foo.Blah.a()