【问题标题】:Simple and nice way to increment nullable Int in Kotlin在 Kotlin 中增加可空 Int 的简单而好方法
【发布时间】:2018-01-12 10:00:19
【问题描述】:

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

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

如果 myInt 是简单的变量,这很好,但是当 myInt 是更长的表达式时,它会变得很长。

【问题讨论】:

标签: syntax kotlin


【解决方案1】:

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

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()可以吗?
  • @DevendraSingh 是的,这些行运行没有错误。但尽量不要在 kotlin 中使用 Integer 类。请改用Int。 IntelliJ 也会就此发出警告。
【解决方案2】:

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

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

这很像 Java,您不必添加任何新的复杂层。

【讨论】:

    【解决方案3】:

    使用inc。在 Kotlin 中,所有的操作符都转换为方法调用。详情请见here

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

    【讨论】:

      【解决方案4】:
      var myInt: Int? = 3
      myInt = myInt?.inc()
      

      请注意,我已将inc() 返回的值分配给myInt,因为documentation 声明如下:

      inc() 和 dec() 函数必须返回一个值,该值将分配给使用 ++ 或 -- 操作的变量。他们不应该改变调用 inc 或 dec 的对象。

      【讨论】:

        【解决方案5】:

        最好的解决方案是crgarridos' 一个。

        如果您想增加其他值,这里有一个替代方法:

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

        打印出来:

        2
        

        【讨论】:

          【解决方案6】:

          为什么不使用也/应用?它看起来更大还是不是最佳做法?

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

          VS

          myInt = myInt?.dec()
          

          【讨论】:

          • 我认为带有.also 的版本有点过于复杂且可读性较差。
          猜你喜欢
          • 2010-10-14
          • 2016-02-21
          • 1970-01-01
          • 2021-09-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-04-03
          相关资源
          最近更新 更多