【发布时间】:2018-01-12 10:00:19
【问题描述】:
在 Kotlin 中增加可为空的 Int 的最简单且可读性最好的方法是什么?除了这样做还有其他方法吗?
var myInt: Int? = 3
myInt = if(myInt!=null) myInt+1 else null
如果 myInt 是简单的变量,这很好,但是当 myInt 是更长的表达式时,它会变得很长。
【问题讨论】:
在 Kotlin 中增加可为空的 Int 的最简单且可读性最好的方法是什么?除了这样做还有其他方法吗?
var myInt: Int? = 3
myInt = if(myInt!=null) myInt+1 else null
如果 myInt 是简单的变量,这很好,但是当 myInt 是更长的表达式时,它会变得很长。
【问题讨论】:
你可以调用操作符的可调用方式:
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
【讨论】:
myInt?.plus(i)。
public val maxFailCount: Integer? = null maxFailCount?.toInt()可以吗?
Integer 类。请改用Int。 IntelliJ 也会就此发出警告。
其他答案提供了较短的替代方案,我将介绍如何正确使用基本的 if 构造:
var myInt: Int? = 3
if (myInt != null) myInt++
这很像 Java,您不必添加任何新的复杂层。
【讨论】:
使用inc。在 Kotlin 中,所有的操作符都转换为方法调用。详情请见here。
var myInt: Int? = 3
myInt = myInt?.inc()
【讨论】:
var myInt: Int? = 3
myInt = myInt?.inc()
请注意,我已将inc() 返回的值分配给myInt,因为documentation 声明如下:
inc() 和 dec() 函数必须返回一个值,该值将分配给使用 ++ 或 -- 操作的变量。他们不应该改变调用 inc 或 dec 的对象。
【讨论】:
最好的解决方案是crgarridos' 一个。
如果您想增加其他值,这里有一个替代方法:
var myInt: Int? = 1
val n = myInt?.plus(1)
println(n)
打印出来:
2
【讨论】:
为什么不使用也/应用?它看起来更大还是不是最佳做法?
myInt?.dec().also { myInt= it }
VS
myInt = myInt?.dec()
【讨论】:
.also 的版本有点过于复杂且可读性较差。