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
が入っていて検査を自動挿入しているだけなのかもしれない。
今日のコミット
- rust-atcoder 1 commit