只有在右侧不为空的情况下才能分配更好的方法?
在Kotlin中,我只想在另一个variables不为空的情况下做一个赋值操作(否则,不操作)。 我可以想到两个简洁的方法:
fun main(args: Array) { var x: Int? = null var n = 0 // ... do something ... x?.let { n = it } // method 1 n = x ?: n // method 2 }
不过,考虑到我必须做的频率,他们不够简洁。 第一种方法似乎是矫枉过正。 第二种方法是在需要expression式之后唠叨?:
我怀疑一定有更好的办法,比如n =? x
n =? x
? 或者n = x?
? 在那儿?
有以下几点:
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提供了更清洁的方法来处理可空性。