kotlin.reflect.KClass.isInstance(值:任何?)不工作

kotlin.reflect.KClass.isInstance(value: Any?) not working

我正在尝试关注

"simple string"::class.isInstance(kotlin.String)

但它 return false!

I'm using

"org.jetbrains.kotlin:kotlin-reflect:1.3.21"

另一个例子也失败了

1::class.isInstance(kotlin.Int)
true::class.isInstance(Boolean)

请帮我理解一下!

您错误地使用了 API,isInstance 函数执行相反的检查,如文档中所示:

Returns true if [value] is an instance of this class on a given platform.

kotlin.Int 行没有引用类型,您错过了 ::class

一个可能的解决方案是翻转声明:

String::class.isInstance("a string")  /// true
Int::class.isInstance(42) /// true

您也可以比较 KClass 对象,例如432::class == Int::class 或使用 KClass 函数 isSubclassOfisSuperclassOf

kotlin.Stringkotlin.IntBoolean作为取值,所以指的是对应类的companion objects。所以第一行检查 String 伴随对象是否是 String 并正确地告诉你它不是。