Kotlin Null 安全警告 Unexpected tokens (use ; to separate expressions on the same line)

Kotlin Null safety warning Unexpected tokens (use ; to seperate expressions on the same line)

我在我的应用程序中尝试 Elvis operator Kotlin 代码并收到以下警告:

Unexpected tokens (use ; to seperate expressions on the same line)

代码:

    var key: String = "KEY is"
    /* "check" is name of String variable which can be null
    Warning coming on following statement*/
    var str : String = check?key.replace("KEY", "ABDS-ASDSA-DSSS")?:check

有什么解决办法吗?

kotlin 不支持三元运算符。

甚至 check 不是 boolean 变量在你的情况下让它成为布尔值或使用 like

var check: String = "something here"
 var key: String = "KEY is"
/*Warning coming on following statement*/
 var str : String = key.replace("KEY", "ABDS-ASDSA-DSSS")?:check

我不明白为什么你在这里需要任何 null 安全运算符。 None 个变量可为空。


你写了

check?key.replace("KEY", "ABDS-ASDSA-DSSS")?:check

?(在 check 之后)不是 Kotlin 中的运算符。

您可能想要 ternary conditional operator, which is simply replaced by if/else

从您的评论来看,您似乎想要 safe call 运算符,即 ?.,而不是 ?

check?.key?.replace("KEY", "ABDS-ASDSA-DSSS") ?: check

Elvis operator 和安全调用操作符之间存在差异。 Elvis 运算符使用表达式,而安全调用运算符只是 空安全 属性 访问或方法调用 .

Elvis 运算符 returns 如果它不为空,则它是第一个操作数,否则 returns 第二个操作数。

?. 运算符 returns null 如果接收者为空,否则,它 returns 调用的结果。