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

在kotlin中减去2个可为空的浮点类型,kotlin,Kotlin,我有两个可为空的浮点属性,我想减去它们: val dis1: Float? = 10.0f val dis2: Float? = 5.0f val value = dis1 - dis2 我创建了这个扩展函数。但它是无限循环的: operator fun Float?.minus(dis2: Float?): Float { return this - dis2 } 除了调用减号操作符,你什么都不做,这就是得到无限循环的方法 进行空检查并调用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
}
除了调用减号操作符,你什么都不做,这就是得到无限循环的方法

进行空检查并调用Float的默认减号运算符

除了调用减号操作符,你什么都不做,这就是得到无限循环的方法

进行空检查并调用Float的默认减号运算符


如果值为null,则可以只返回0,以避免KotlinNullPointerException。 在您的方法中:

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

   return firstValueHelper - secondValueHelper
}

如果值为null,则可以只返回0,以避免KotlinNullPointerException。 在您的方法中:

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

   return firstValueHelper - secondValueHelper
}
你能用的简单吗

operator fun Float?.minus(dis2: Float?): Float {
    return (this ?: 0f) - (dis2 ?: 0f)
}
?:检查值是否存在,如果不存在,则分配默认值

但它是无限循环的

您的扩展将进入无限循环,因为在返回类型中,您再次在两个可为空的浮点上调用-减号。

简单,您可以使用

operator fun Float?.minus(dis2: Float?): Float {
    return (this ?: 0f) - (dis2 ?: 0f)
}
?:检查值是否存在,如果不存在,则分配默认值

但它是无限循环的


扩展将进入无限循环,因为在返回类型中,您再次调用两个可为空的浮点数上的-减号。

如果您想要null-null=0,则其他答案很好。但是,如果您想要null-null=null,则需要稍微不同的答案

如果期望的行为是:

10 - 5 = 5 10-空=10 null-5=-5 空-空=空 然后使用以下命令

操作员乐趣浮动?其他:浮动?:浮动?{ 如果this==null&&other==null,则返回{ 无效的 }否则{ a?:0f-b?:0f } }
注意,加法可以在一个

中实现,如果您想要null-null=0,其他答案是好的,但是如果您想要null-null=null,那么您需要稍微不同的答案

如果期望的行为是:

10 - 5 = 5 10-空=10 null-5=-5 空-空=空 然后使用以下命令

操作员乐趣浮动?其他:浮动?:浮动?{ 如果this==null&&other==null,则返回{ 无效的 }否则{ a?:0f-b?:0f } }
请注意,可以在

中实现添加。我创建此扩展函数的主要原因是不使用断言。有更好的解决方案吗?如果你不想做一个断言,那就很奇怪了。那么,null-1.0f或7.0f-null的结果会是什么呢?您的运算符签名返回浮点数。我创建此扩展函数的主要原因是not use断言。有更好的解决方案吗?如果你不想做一个断言,那就很奇怪了。那么,null-1.0f或7.0f-null的结果会是什么呢?您的操作员签名返回浮点值