2017-05-06 115 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 
    } 
    } 
}