【发布时间】:2020-01-18 00:57:01
【问题描述】:
假设我有一个简单的类Foo 和一个可以为空的String?
data class Foo(
val bar: String?
)
我创建了一个简单的函数capitalize
fun captitalize(foo: Foo) = when {
foo.bar != null -> runCatching { foo.bar.capitalize() }
else -> ""
}
这很好,因为编译器推断 foo.bar 不能为空,即使它的类型是可空的。但后来我决定编写与Foo的扩展相同的函数
fun Foo.captitalize2() = when {
bar != null -> runCatching { bar.capitalize() }
else -> ""
}
突然之间,编译器不再能够推断 bar 不为空,而 IntelliJ 告诉我“只允许对可空值进行安全 (?.) 或非空断言 (!!.) 调用字符串类型的接收者?”
谁能解释一下原因?
【问题讨论】:
标签: kotlin nullable kotlin-extension