只有在右侧不为空的情况下才能分配更好的方法?

在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) ,因为编译器只知道nInt并且没问题。 但是,任务后面的任何行将永远不会被调用,因为我们从范围return 。 根据你想要什么,这是一个没有操作。 我们不能继续,因为n不能被分配,所以只是返回。

另一种选择是val n: Int = x!! 这将抛出一个NullPointerException如果x == null应该在其他地方处理。 我不推荐这种做法,因为Kotlin提供了更清洁的方法来处理可空性。