2017-05-06 110 views
2

我最近遇到了安全导航操作员(?.)和仿制药的问题。Kotlin类型与仿制药不匹配

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

我相信上面的代码应该没有问题运行,但它会产生上面显示的错误。我错过了什么吗?

+0

尽管传递给let的块只在值不为空的情况下执行,它仍然是块内的T型。所以你可以赋值给Any类型的变量,但不赋给Any类型的变量。 –

+0

@JBNizet所以我可以肯定它不是空的,只是施展它? – 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 
    } 
    } 
}