blog.bouzuya.net

2021-02-04 Kotlin の lateinit は primitive type には使えない

メモ。 Kotlin の lateinit には primitive type は使えない。

https://kotlinlang.org/docs/reference/properties.html#late-initialized-properties-and-variables

プロパティは定義と同時あるいはコンストラクタでの初期化が必要になる。

ただ場合によっては初期化できない場合もある。たとえばフレームワーク側から fun initialize() のような初期化用メソッドが呼び出される場合などだ。

こういう場合はプロパティを nullable にして null を入れて初期化しておくことでコンパイルできる。

var s: String? = null

この方法を選ぶと s には常に null チェックがつきまとってしまう。

そこで Kotlin には lateinit が用意されている。

lateinit var s: String

これを使うと初期化しなくてもコンパイルエラーにならなくなる。そして型は nullable ではないため null チェックは不要になる。初期化されることが自明なときにしか使わないはずだがもし初期化前にアクセスしてしまった場合は専用の例外が投げられる。

kotlin.UninitializedPropertyAccessException: lateinit property s has not been initialized

注意としてこれは primitive type には使えないらしい。実際には変数に null が入っていて検査を自動挿入しているだけなのかもしれない。


今日のコミット