小编Boh*_*n90的帖子

Kotlin扩展功能-编译器无法推断nullable不为null

假设我有一个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断言(!!。)调用。串?”

谁能解释为什么?

nullable kotlin kotlin-extension

7
推荐指数
1
解决办法
76
查看次数

标签 统计

kotlin ×1

kotlin-extension ×1

nullable ×1