Kotlinの静的初期化ブロックに相当するものは何ですか?
Kotlinは静的なものを持たないように設計されていることを理解しています。同等のセマンティクスを持つものを探しています-クラスが最初にロードされたときにコードが1回実行されます。
私の特定のユースケースは、Android AppCompatライブラリからDayNight機能を有効にしたい場合で、命令は、Application
クラスの静的初期化ブロックにコードを配置するように指示しています。
Kotlinの静的初期化ブロックに相当するものは何ですか?
Kotlinは静的なものを持たないように設計されていることを理解しています。同等のセマンティクスを持つものを探しています-クラスが最初にロードされたときにコードが1回実行されます。
私の特定のユースケースは、Android AppCompatライブラリからDayNight機能を有効にしたい場合で、命令は、Application
クラスの静的初期化ブロックにコードを配置するように指示しています。
回答:
ある観点から、Kotlincompanion object
のsはJavaクラスの静的部分に相当します。特に、クラスが最初に使用される前に初期化されます。これによりinit
、Java静的初期化子の代わりにブロックを使用できます。
class C {
companion object {
init {
//here goes static initializer code
}
}
}
object
宣言のあるソリューションでは、初期化が遅いため、実際にどこかで使用する必要があります。
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のように使用できます。