在Kotlin中减去2可为空的浮点类型

时间:2019-06-10 07:09:48

标签: kotlin

我有两个可为null的float属性,我想减去它们:

val dis1: Float? = 10.0f
val dis2: Float? = 5.0f

val value = dis1 - dis2

我创建了此扩展功能。但是它进入了无限循环:

operator fun Float?.minus(dis2: Float?): Float {
  return this - dis2
}

4 个答案:

答案 0 :(得分:3)

简单易用

operator fun Float?.minus(dis2: Float?): Float {
    return (this ?: 0f) - (dis2 ?: 0f)
}

?:检查是否存在值,然后分配默认值

  

但是它会陷入无限循环

您的扩展程序将陷入无限循环,因为再次返回类型时,您要在两个可为null的浮点数上调用-(减号)

答案 1 :(得分:2)

除了调用减号运算符之外,您什么也不会做,这会导致无限循环

进行空检查,并调用默认的负运算符Float

  val dis1: Float? = 10.0f
  val dis2: Float? = 5.0f

  operator fun Float?.minus(dis2: Float?): Float {
        return (this ?: 0f) - (dis2 ?: 0f)

  val value = dis1 - dis2

答案 2 :(得分:2)

如果值是null,则只需返回0即可避免使用KotlinNullPointerException。 在您的方法中:

fun minus(value1: Float?, value2: Float): Float{
   val firstValueHelper = value1 :? 0f
   val secondValueHelper = value2 :? 0f

   return firstValueHelper - secondValueHelper
}

答案 3 :(得分:0)

如果您想要null - null = 0,则其他答案也不错,但是,如果您想要null - null = null,则需要稍有不同。

如果所需的行为是:

  • 10 - 5 = 5
  • 10 - null = 10
  • null - 5 = -5
  • null - null = null

然后使用以下

operator fun Float?.minus(other: Float?): Float? { 
    return if (this == null && other == null) {
        null
    } else {
        (a ?: 0f) - (b ?: 0f)
    }
}

请注意,可以在similar way

中实现加法