1. ホーム
  2. kotlin

総型化されたプロパティはなぜnullableなのか?

2023-12-02 04:55:32

質問

パラメータ化されたクラスを作成しようとしています。 lateinit を持つパラメタライズドクラスを作ろうとしています。

class Test<T> {

   private lateinit var t : T

   private lateinit var s : String

}

後者は許されますが、前者は許されません。コンパイラは次のようなエラーを返します。

Error:(7, 11) ''lateinit'' modifier is not allowed on nullable properties

を宣言しなかったので T? を宣言していないので、なぜこのようなことが起こるのか混乱しています。

どのように解決するのですか?

デフォルトの上限値(何も指定されていない場合)は Any? ( ソース )

つまり T であると仮定すると、Kotlin は 任意の 型、プリミティブ、オブジェクト、あるいは null 可能な参照であるとしています。

これを修正するために、上位の型を追加します。

class Test<T: Any> { ... }