假设我有一个Foo带有可空值的简单类String?
data class Foo(
val bar: String?
)
Run Code Online (Sandbox Code Playgroud)
我创建了一个简单的函数 capitalize
fun captitalize(foo: Foo) = when {
foo.bar != null -> runCatching { foo.bar.capitalize() }
else -> ""
}
Run Code Online (Sandbox Code Playgroud)
这很好用,因为尽管编译器推断foo.bar的类型可以为空,但它不能为null。但是后来我决定编写与扩展相同的函数Foo
fun Foo.captitalize2() = when {
bar != null -> runCatching { bar.capitalize() }
else -> ""
}
Run Code Online (Sandbox Code Playgroud)
突然编译器不再能够推断出bar不是null,而IntelliJ告诉我“在类型为null的接收者上仅允许安全(?。)或非null断言(!!。)调用。串?”
谁能解释为什么?