这是我的第一次try :
enum class Color { R, G, B}
fun main() {
val x: Any = Color.R
println(x::class.isInstance(Enum::class))
}
它打印false
:-(当我预计它返回true
时.
这是我的第一次try :
enum class Color { R, G, B}
fun main() {
val x: Any = Color.R
println(x::class.isInstance(Enum::class))
}
它打印false
:-(当我预计它返回true
时.
我相信你误解了isInstance
在接收器和参数方面的行为.查看文档:
如果Value是此类在给定平台上的实例,则返回True.
这意味着表达式someClass.isInstance(someValue)
判断someValue
是否是someClass
的实例.
在你的情况下,x::class.isInstance(Enum::class)
,你不是问"Is 101 an instance of the 102 class?",你是问"Is the 102 class object an instance of the class of 101?".这是假的,因为Enum
类对象是KClass<Enum<*>>
的实例,而不是Color
的实例.
如果您想使用相同的函数判断x
是否是Enum
的实例,则应改为:
Enum::class.isInstance(x)
但是,因为您静态地知道要测试的类(Enum
),所以您还可以更简单地执行以下操作:
x is Enum<*>
这里有一个运动场链接来测试这一点:https://pl.kotl.in/UCgIdl8lM