2017-05-06 14 views
2

私は最近安全ナビゲーションオペレーター(?.)とジェネリックスに関する問題を経験しました。コトルタイプのジェネリックとの不一致

class A<T : Any?>(private var value: T) { 
    fun function() { 
     value?.let { 
      val notNull: Any = it 
      //     ^^ 
      // Type mismatch: 
      // Required: Any 
      // Found: T 
     } 
    } 
} 

私は上記のコードは問題なく動作しているはずですが、上記のエラーが発生すると思います。何か不足していますか?

+0

letに渡されたブロックは、値がnullでない場合にのみ実行されますが、 'it'はブロック内ではまだT型です。したがって、Any型の変数にはisを代入できますが、Any型の変数には代入できません。 –

+0

@JBNizetので、それがnullではないことを確かめることができますし、それをキャストしますか? – Mibac

+0

はい、そうすることができます。しかし、あなたの方法がなぜ一般的であるのかは分かりません。 –

答えて

1

私はあなたがそのエラーを得るためにあなたの例からいくつかを残したと思います。だから私は推測するつもりです、あなたが本当に達成しようとしていること、私があなたの意図を誤解した場合、私を許してください。

class A<T : Any>(private val value: T?) { // T? instead of T to allow null value 
    fun function() { 
    value?.let { 
     // *it* is already a non-null because you did a ?.let on a T? type 
    } 
    } 
} 
関連する問題