Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Generics Kotlin类型与泛型不匹配_Generics_Kotlin_Nullable - Fatal编程技术网

Generics Kotlin类型与泛型不匹配

Generics Kotlin类型与泛型不匹配,generics,kotlin,nullable,Generics,Kotlin,Nullable,我最近遇到了一个关于安全导航操作符(?。)和泛型的问题 class A<T : Any?>(private var value: T) { fun function() { value?.let { val notNull: Any = it // ^^ // Type mismatch: // Required: Any

我最近遇到了一个关于安全导航操作符(
?。
)和泛型的问题

class A<T : Any?>(private var value: T) {
    fun function() {
        value?.let { 
            val notNull: Any = it
            //                 ^^
            // Type mismatch: 
            // Required: Any
            // Found:    T
        }
    }
}
A类(专用var值:T){
趣味功能(){
值?让{
val notNull:Any=it
//                 ^^
//类型不匹配:
//必填项:任何
//发现:T
}
}
}

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

我认为您在示例中遗漏了一些东西,从而导致了错误。所以我要猜测你真正想要达到的目标,如果我误解了你的意图,请原谅我

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
    }
  }
}
class A(private val value:T?{//T?代替T允许空值
趣味功能(){
价值?让我们{
//*它*已经是非空的,因为您在T?类型上使用了?let
}
}
}

尽管传递给let的块仅在值不为null时执行,但它在块内仍然是T类型。因此,您可以将is赋值给Any?类型的变量,但不能赋值给Any类型的变量。@JBNizet因此,我可以确保它不为null并将其强制转换吗?是的,您可以这样做。但是我真的不明白为什么你的方法是泛型的。你可以这样定义你的类:
class A(private var value:t?
@marstran没有想到这一点。非常感谢。