【发布时间】:2016-10-19 20:14:40
【问题描述】:
我遇到了一个问题,这似乎很简单,每个人都应该在某个时候遇到过它,但在任何地方都找不到解决方案。
从 REPL 复制:
var a : Int = 1
var c : Int? = 3
a + if (c != null) {c} else {0}
ERROR: None of the following functions can be called with supplied argument (followed by the various implementations of kotlin.int.plus())
所以我想要做的是将一个 Int 和一个 Int 加在一起?我希望结果是一个 Int。非常简单。我当然知道!! 运算符,但是我想尽可能避免使用它,因为它不是更改安全†。
a + if (c != null) {c!!} else {0}
4
我知道以下解决方案,它处理空安全并避免使用 !! 运算符。
a + (c ?: 0)
4
我的问题如下:有没有办法使用 if-else 块和/或 when 块进行加法,这不需要使用 !! 运算符。我更喜欢使用 if-else 而不是 Elvis 运算符的原因是,对于来自没有 Elvis 运算符的语言的人来说是可理解的。所以我想尽可能接近a + if (c != null) {c} else {0}。
谢谢,如果我的问题或动机不清楚或与 Kotlin 的设计或意图相反,请告诉我。
† 当然,我可以断言某些变量在添加时是安全的,但是即使它周围的代码发生变化,这个断言也会保留在那里,可能会使断言无效,从而否定 Kotlin 的观点之一:零安全性。
【问题讨论】:
标签: kotlin