在Kotlin中,我想仅在另一个变量不为空时才进行赋值(否则,不执行操作)。我可以想到两种简洁的方法:
fun main(args: Array<String>) {
var x: Int? = null
var n = 0
// ... do something ...
x?.let { n = it } // method 1
n = x ?: n // method 2
}
然而,考虑到我必须做的频率,他们并不觉得足够简洁。第一种方法似乎有点矫枉过正。第二种方法是在?:
之后要求表达式。
我怀疑必须有更好的方式,例如n =? x
?还是n = x?
?有吗?
答案 0 :(得分:1)
尝试infix
来'模拟自定义操作'
// define this
infix fun <T > T.assignFromNotNull(right: T): T = right ?: this
///////////////////////////////////////////////////////////
// Demo using
// Now, Kotlin infix-style
fooA assignFromNotNull fooB
barA assignFromNotNull barB
bazA assignFromNotNull bazB
// Old code, Java if-style
if (fooB != null) {
fooA = fooB;
}
if (barB != null) {
barA = barB;
}
if (bazB != null) {
bazA = bazB
}
答案 1 :(得分:0)
有以下内容:
val x: Int? = null
val n: Int = x ?: return
尽管可能未分配n
,但此编译完全正常。即使在“分配”之后使用n
的来电也是允许的,例如println(n)
,因为编译器只知道n
是Int
而且没问题。但是,永远不会调用赋值后的任何行,因为我们从作用域return
开始。根据你的需要,这是一个无操作。我们无法继续,因为无法分配n
,所以只需返回。
另一个选项是val n: Int = x!!
,如果应该在其他地方处理NullPointerException
,则会x == null
。我不推荐这种做法,因为Kotlin提供了更清洁的方法来处理可空性。