在Kotlin中增加可空Int的最简单和最好的可读方法是什么?除了这样做还有其他方法吗?
var myInt: Int? = 3 myInt = if(myInt!=null) myInt+1 else null
字符串如果myInt是简单变量,这是很好的,但是当myInt是一些较长的表达式时,它可以变得很长。
yfjy0ee71#
你可以以其可调用的方式调用操作符:
myInt = myInt?.inc()
字符串请注意,inc()运算符不会改变其接收者的值,而是创建一个新值。这意味着以下语句不会改变myInt:
inc()
myInt
val myInt: Int? = null myInt?.inc() // myInt still being null
型两者都不是:
val myInt: Int? = 5 myInt?.inc() // myInt still being 5
型
rdlzhqv92#
其他的答案提供了更短的替代方案,我将介绍如何正确使用基本的if结构:
var myInt: Int? = 3 if (myInt != null) myInt++
字符串这很像在Java中,你不必添加任何新的复杂层。
l7mqbcuq3#
使用inc。在Kotlin中,所有运算符都转换为方法调用。更多细节请参见here。
inc
var myInt: Int? = 3 myInt = myInt?.inc()
字符串
cwtwac6a4#
字符串请注意,我已经将inc()返回的值赋给了myInt,因为documentation声明了以下内容:inc()和dec()函数必须返回一个值,该值将被分配给使用++或--操作的变量。它们不应该改变inc或dec调用的对象。
zpqajqem5#
最好的解决方案是crgarridos'。如果你想增加其他值,这里有一个替代方案:
var myInt: Int? = 1 val n = myInt?.plus(1) println(n)
字符串这将打印:
2
ki1q1bka6#
为什么不使用also/apply?它看起来更大,或者它不是这样做的最佳实践?
myInt?.dec().also { myInt= it }
字符串VS
myInt = myInt?.dec()
6条答案
按热度按时间yfjy0ee71#
你可以以其可调用的方式调用操作符:
字符串
请注意,
inc()
运算符不会改变其接收者的值,而是创建一个新值。这意味着以下语句不会改变myInt
:型
两者都不是:
型
rdlzhqv92#
其他的答案提供了更短的替代方案,我将介绍如何正确使用基本的if结构:
字符串
这很像在Java中,你不必添加任何新的复杂层。
l7mqbcuq3#
使用
inc
。在Kotlin中,所有运算符都转换为方法调用。更多细节请参见here。字符串
cwtwac6a4#
字符串
请注意,我已经将
inc()
返回的值赋给了myInt
,因为documentation声明了以下内容:inc()和dec()函数必须返回一个值,该值将被分配给使用++或--操作的变量。它们不应该改变inc或dec调用的对象。
zpqajqem5#
最好的解决方案是crgarridos'。
如果你想增加其他值,这里有一个替代方案:
字符串
这将打印:
型
ki1q1bka6#
为什么不使用also/apply?它看起来更大,或者它不是这样做的最佳实践?
字符串
VS
型