Kotlin の静的メソッドと変数は?質問する

Kotlin の静的メソッドと変数は?質問する

クラス インスタンスをプライベート/パブリックの静的変数に保存できるようにしたいのですが、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 の組み込み機能であるため)。

おすすめ記事