Kotlin における Java の静的メソッドに相当するものは何ですか? 質問する

Kotlin における Java の静的メソッドに相当するものは何ですか? 質問する

staticKotlin にはキーワードはありません。

staticKotlin で Java メソッドを表現する最適な方法は何ですか?

ベストアンサー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 でも機能します)。

おすすめ記事