クラス インスタンスをプライベート/パブリックの静的変数に保存できるようにしたいのですが、Kotlin でこれを行う方法がわかりません。
public class Foo {
private static Foo instance;
public Foo() {
if (instance == null) {
instance = this;
}
}
public static Foo get() {
return instance;
}
}
ベストアンサー1
アップデート: いわゆる「シングルトン」(Android を除くと「サービス」と呼ばれることもあります) だけが必要な人 (OP など) は、Kotlin の組み込みを使用するだけで済みます。
object Foo {
// Done, this already does what OP needed,
// because the boilerplate codes (like static field and constructor),
// are taken care of by Kotlin.
}
(のようにローマコメント欄で正しく指摘されました。
前の回答; 複数の変数がある場合(または複数の変数を使用する予定がある場合)はstatic
、読み続けてください。
Java の静的フィールドに最も近いのはコンパニオン オブジェクトです。コンパニオン オブジェクトに関するドキュメント リファレンスは、次の場所にあります。https://kotlinlang.org/docs/reference/object-declarations.html#companion-objects
Kotlin でのコードは次のようになります。
class Foo {
companion object {
private lateinit var instance: Foo
fun get(): Foo {
return instance;
}
}
init {
if (instance == null) {
instance = this
}
}
}
フィールド/メソッドをJava呼び出し元に静的として公開したい場合は、@JvmStatic
注釈:
class Foo {
companion object {
private lateinit var instance: Foo
@JvmStatic fun get(): Foo {
return instance;
}
}
init {
if (instance == null) {
instance = this
}
}
}
注記インポートは
@JvmStatic
必要ありません (Kotlin の組み込み機能であるため)。