lateinit
ジェネリック型の非 null 値プロパティを持つパラメーター化されたクラスを作成しようとしています。
class Test<T> {
private lateinit var t : T
private lateinit var s : String
}
後者は許可されますが、前者は許可されません。コンパイラは次のエラーを返します。
エラー:(7, 11) ''lateinit'' 修飾子は null 許容プロパティでは許可されません
申告していなかったのにT?
、なぜそうなるのかわかりません。
ベストアンサー1
デフォルトの上限(指定されていない場合)は
Any?
(ソース)
言い換えれば、 を使用するとT
、Kotlinはこれがどれでも型は、プリミティブ、オブジェクト、または null 許容参照のいずれかです。
これを修正するには、上位タイプを追加します。
class Test<T: Any> { ... }