Kotlinの静的初期化ブロック


83

Kotlinの静的初期化ブロックに相当するものは何ですか?

Kotlinは静的なものを持たないように設計されていることを理解しています。同等のセマンティクスを持つものを探しています-クラスが最初にロードされたときにコードが1回実行されます。

私の特定のユースケースは、Android AppCompatライブラリからDayNight機能を有効にしたい場合で、命令は、Applicationクラスの静的初期化ブロックにコードを配置するように指示しています。

回答:


122

ある観点から、Kotlincompanion objectのsはJavaクラスの静的部分に相当します。特に、クラスが最初に使用される前に初期化されます。これによりinit、Java静的初期化子の代わりにブロックを使用できます。

class C {
    companion object {
        init {
            //here goes static initializer code
        }
    }
}

1
コンパニオンオブジェクトはここではやり過ぎです
voddan 2016年

4
@ voddan、OPは、既存のクラスを最初に使用する前にコードを実行することについて質問しました。object宣言のあるソリューションでは、初期化が遅いため、実際にどこかで使用する必要があります。
ホットキー2016年

1
@voddanなぜそれがやり過ぎであるのか、そして代替案は何であるのかを説明していただけませんか?
マルチンKoziński

2
申し訳ありませんが、クラスの読み込みを気にしないと誤解されました。コンパニオンオブジェクトはここでの正しい解決策です
voddan 2016

3
companion object  { 
    // Example for a static variable
    internal var REQUEST_CODE: Int? = 500

    // Example for a static method
    fun callToCheck(value: String): String {
        // your code
    }
}

クラス内のオブジェクト宣言は、companionキーワードでマークできます。この下では、java staticmethodやvariable.LIkeclassname.methodnameまたはclassname.variablenameのように使用できます。


あなたのコードにいくつかの説明を追加してください
フリーランサー

@DerickDaniel今すぐチェックしてください。
abhilashaYadav18年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.