Kotlin - クラス - lateinit
公開日:2019-11-25 更新日:2019-11-25
[Kotlin]
1. 概要
lateinit を使うと、プロパティの初期化を遅らせることができます。
null許容型にして null を代入して初期化エラーを回避している場合は、lateinit の使用を検討してください。
また、lateinit は、プリミティブ型では使用できません。
null許容型にして null を代入して初期化エラーを回避している場合は、lateinit の使用を検討してください。
また、lateinit は、プリミティブ型では使用できません。
2. lateinit
プロパティは必ず初期化する必要があります。
コンストラクタなどで初期化できない場合は、Null許容型にして null を設定して回避することもできますが、 Not Null が保証されないため、使用する場合は、必ず「?.」を使う必要が出てきます。
そこで、lateinit を使うと、Null許容型にせずに初期化エラーを回避することができます。
Null許容型にして初期化エラーを回避しているパターン
lateinit で初期化を遅らせるパターン
但し、初期化前に参照するとエラーが出るため、注意する必要があります。
コンストラクタなどで初期化できない場合は、Null許容型にして null を設定して回避することもできますが、 Not Null が保証されないため、使用する場合は、必ず「?.」を使う必要が出てきます。
そこで、lateinit を使うと、Null許容型にせずに初期化エラーを回避することができます。
Null許容型にして初期化エラーを回避しているパターン
data class TestData(var value:Int)
class Test {
var data: TestData? = null
fun init() {
data = TestData(100)
}
}
fun main() {
val obj = Test()
obj.init()
println(obj.data?.value) // 100
//println(obj.data.value) // コンパイルエラー
}
lateinit で初期化を遅らせるパターン
但し、初期化前に参照するとエラーが出るため、注意する必要があります。
data class TestData(var value:Int)
class Test {
lateinit var data: TestData
fun init() {
data = TestData(100)
}
}
fun main() {
val obj = Test()
obj.init()
println(obj.data.value) // 100
}