这是我的第一次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

Kotlin相关问答推荐

在KMP中使用koin将来自Android的上下文注入到SQLDelight Driver中

KTOR';S函数`staticResources`在Kotlin本机目标上不可用

当我通过媒体通知更改音乐时不要更新我的 UI

限制通用Kotlin枚举为特定类型

使用调度程序运行异步 Kotlin 代码

是什么让 Kotlin 中的 String 类能够使用方括号?

异常传播如何在 CoroutineScope.async 上工作?

找不到引用的类 kotlin.internal.annotations.AvoidUninitializedObjectCopyingCheck

为什么 Kotlin 扩展运算符在传递原始可变参数时需要 toTypedArray()?

java - 如何将函数作为参数从java传递给kotlin方法?

Kotlin 枚举中的循环引用

是否可以在 kotlin 中嵌套数据类?

Kotlin 有 array.indexOf 但我无法弄清楚如何做 array.indexOfBy { lambda }

Kotlin通过映射委托属性,如果映射中不存在,则抛出NoTouchElementException

如何在Kotlin中获得KType?

不推荐使用仅限生命周期的LifecycleEvent

Lint 错误:可疑的相等判断:在 Object DiffUtilEquals 中未实现 equals()

从另一个列表创建一个列表

是否可以在不使用class的情况下将 Mockito 与 Kotlin 一起使用?

如何在 kotlin 中创建重复对象数组?