Kotlin中的Float.isNaN'接收器类型不匹配'错误

问题描述

我是Kotlin的新手,对Kotli'ns内置的FLoat.isNaN和Double.isNaN函数有疑问。当使用Float.isNaN函数测试浮点数组列表的NaN相等时,我收到错误消息:

解决的参考。由于接收器类型不匹配,以下候选者都不适用:

  • 公共内联乐趣Double.isNaN():在kotlin public中定义的布尔值
  • 内联乐趣Float.isNaN():Kotlin中定义的布尔值

下面列出了伪代码,不胜感激:

var scores = arraylistof<Float>()
val todaysResult = scores[0]
if(Float.isNaN(todaysResult)) {
    todayResultNumericTextView!!.text = "-"
} else {
    todayResultNumericTextView!!.text = Math.round(todaysResult).toString() + "%"
}

解决方法

isNaNFloatDouble的扩展函数(不同于Java,这不是“静态”方法!)这意味着您必须使用值作为接收者来调用它。

fun Double.isNaN(): Boolean
fun Float.isNaN(): Boolean

代替

Float.isNaN(todaysResult)

您想要的

todaysResult.isNaN()

错误消息也表明了这一点:

public inline fun Double.isNaN(): Boolean中定义的

kotlin
public inline fun Float.isNaN(): Boolean

中定义的kotlin

语法Float.isNaN()表示此函数采用类型为Float接收器


另请参阅:Extensions (Kotlin reference)