在Kotlin中增加可空Int的简单而好的方法

0lvr5msh  于 6个月前  发布在  Kotlin
关注(0)|答案(6)|浏览(90)

在Kotlin中增加可空Int的最简单和最好的可读方法是什么?除了这样做还有其他方法吗?

var myInt: Int? = 3
myInt = if(myInt!=null) myInt+1 else null

字符串
如果myInt是简单变量,这是很好的,但是当myInt是一些较长的表达式时,它可以变得很长。

yfjy0ee7

yfjy0ee71#

你可以以其可调用的方式调用操作符:

myInt = myInt?.inc()

字符串
请注意,inc()运算符不会改变其接收者的值,而是创建一个新值。这意味着以下语句不会改变myInt

val myInt: Int? = null
myInt?.inc() // myInt still being null


两者都不是:

val myInt: Int? = 5
myInt?.inc() // myInt still being 5

rdlzhqv9

rdlzhqv92#

其他的答案提供了更短的替代方案,我将介绍如何正确使用基本的if结构:

var myInt: Int? = 3
if (myInt != null) myInt++

字符串
这很像在Java中,你不必添加任何新的复杂层。

l7mqbcuq

l7mqbcuq3#

使用inc。在Kotlin中,所有运算符都转换为方法调用。更多细节请参见here

var myInt: Int? = 3
myInt = myInt?.inc()

字符串

cwtwac6a

cwtwac6a4#

var myInt: Int? = 3
myInt = myInt?.inc()

字符串
请注意,我已经将inc()返回的值赋给了myInt,因为documentation声明了以下内容:
inc()和dec()函数必须返回一个值,该值将被分配给使用++或--操作的变量。它们不应该改变inc或dec调用的对象。

zpqajqem

zpqajqem5#

最好的解决方案是crgarridos'
如果你想增加其他值,这里有一个替代方案:

var myInt: Int? = 1
val n = myInt?.plus(1)
println(n)

字符串
这将打印:

2

ki1q1bka

ki1q1bka6#

为什么不使用also/apply?它看起来更大,或者它不是这样做的最佳实践?

myInt?.dec().also { myInt= it }

字符串
VS

myInt = myInt?.dec()

相关问题