【发布时间】:2017-05-06 23:48:04
【问题描述】:
我最近遇到了一个关于安全导航运算符 (?.) 和泛型的问题。
class A<T : Any?>(private var value: T) {
fun function() {
value?.let {
val notNull: Any = it
// ^^
// Type mismatch:
// Required: Any
// Found: T
}
}
}
我相信上面的代码运行应该没有问题,但它会产生上面显示的错误。我错过了什么吗?
【问题讨论】:
-
尽管传递给 let 的块只有在值不为空时才会执行,
it在块内仍然是 T 类型。所以你可以将 is 赋值给 Any? 类型的变量,但不能赋值给 Any 类型的变量。 -
@JBNizet 所以我可以确定它不为空并直接转换它吗?
-
是的,你可以这样做。但我真的不明白为什么你的方法是通用的。
-
你可以这样定义你的类:
class A<T : Any>(private var value: T?) -
@marstran 没有想到这一点。谢谢!