1. ホーム

[解決済み】KotlinでJavaの静的メソッドに相当するものは何ですか?

2022-03-23 12:37:33

質問

はありません。 static というキーワードがKotlinにあります。

を表現するのに最適な方法は何ですか? static Java のメソッドを Kotlin で使用できますか?

どのように解決するのですか?

関数をコンパニオンオブジェクトに配置します。

だから、このような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とKotlinの両方で使用できます。 Foo.a() .

に嫌われるだけならまだしも Companion という名前にすることもできます。 コンパニオン・オブジェクトの名前を明示的に指定する場合は、次のようになります。

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

を使えば、Kotlin からも同じように呼び出すことができます。 のようにjavaから Foo.Blah.a() (これはKotlinでも動作します)。