我有两个可为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
}
答案 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
中实现加法