小编典典

Kotlin 中的 Java 静态方法等价物是什么?

all

Kotlin中没有static关键字。

static在 Kotlin中表示 Java 方法的最佳方式是什么?


阅读 195

收藏
2022-03-01

共1个答案

小编典典

您将函数放在“伴侣对象”中。

所以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 关键字标记:

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().

如果只是不喜欢它的Companion名称,那么您还可以为伴生对象提供一个显式名称,如下所示:

class Foo {
  companion object Blah {
    fun a() : Int = 1;
  }
}

这将让您以相同的方式从 Kotlin 调用它,但从 java 中调用它Foo.Blah.a()(这也将在 Kotlin 中工作)。

2022-03-01