Kotlin - クラス - init ブロック
公開日:2019-11-21 更新日:2019-11-21
[Kotlin]
1. 概要
init ブロックについてです。
2. init ブロック
クラス内にある init ブロックは、クラスのインスタンス生成時に、上から順に実行されます。
コンストラクタやプロパティの初期化などで使用できます。
init ブロックで初期化していないプロパティにアクセスした場合はコンパイルエラーになりますが、 メソッドから初期化されていないプロパティにアクセスした場合はエラーにならないため要注意です。
プロパティごとに init を付けて初期化することもできます。
この場合、プロパティ定義時に初期化しなくてもエラーになりません。
コンストラクタやプロパティの初期化などで使用できます。
init ブロックで初期化していないプロパティにアクセスした場合はコンパイルエラーになりますが、 メソッドから初期化されていないプロパティにアクセスした場合はエラーにならないため要注意です。
class Test() {
init {
println("init-1")
//println(this.value1) // value1 が初期化されていないためコンパイルエラー
println(add()) // 0。要注意。この段階では value1 が初期化されていないが、エラーにならない。
}
val value1:Int = 100
val value2:Int = 200
init {
println("init-2")
println(this.value1) // 100
println(this.value2) // 200
}
fun add():Int {
return value1 + value2
}
init {
println("init-3")
println(add()) // 300
}
}
fun main() {
val obj = Test()
}
プロパティごとに init を付けて初期化することもできます。
この場合、プロパティ定義時に初期化しなくてもエラーになりません。
class Test() {
val value1:Int
init {
value1 = 100
}
val value2:Int
init {
value2 = 200
}
}
fun main() {
val obj = Test()
println(obj.value1) // 100
println(obj.value2) // 200
}