2015-10-08 9 views
19

私はジェネリック型のlateinit非NULL可能性を有するパラメータ化クラスを作成しようとしています。私はT?を宣言していないのでジェネリック型のプロパティがnullに設定されるのはなぜですか?</p> <pre><code>class Test<T> { private lateinit var t : T private lateinit var s : String } </code></pre> <p>後者は許可されているが、前者ではありません:

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

が、私はこれが事実である理由として混乱しています:コンパイラは、次のエラーを返します。

+0

ダーン:

が上位タイプを追加修正します。私は単純な検索でそれを見つけられませんでした。質問のタイトルに「lateinit」を含めることをお勧めします。なぜならそれが最初の問題の原因となるからです。 –

答えて

32

、換言すれば、(http://kotlinlang.org/docs/reference/generics.html#generic-constraints

「(何も指定されていない場合)上限デフォルトはAny?ある」あなたはTを使用する場合、Kotlinがあること、これはどのタイプかもしれないことを前提とし、それプリミティブ、オブジェクトまたはnull可能な参照。

TL; DR;それは、私は自分自身を掲示し、この質問に答えるつもりだった

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

とBTWでは、構文 'T?'は許可されないため、技術的には矛盾はありません。 – voddan

+2

'T'は' T'の宣言ではなく 'T'の使用で許されます。したがって、「val x:T?」が有効です。 –

+0

あなたはTでもっと読むことができますか?ここhttps://medium.com/@igorwojda/kotlin-deep-dive-into-generics-nullability-9853d9a9f50d –

関連する問題

 関連する問題