首页 > 解决方案 > Kotlin:枚举伴随函数

问题描述

我正在尝试使用一个简单的函数来扩展 Enum 伴随对象,如下所示:

fun Enum.Companion.myFun() = 1

但是,当我尝试在 Enum 上调用它时State,Kotlin 并不知道。

State.myFun()

我可以看到它适用于Enum.myFun(),但这不是我需要的。

标签: kotlin

解决方案


遗憾的是这是不可能的。您必须分别为State任何其他子类声明伴侣。

扩展是静态解析的

我们要强调的是,扩展函数是静态调度的,即它们不是按接收者类型虚拟的。这意味着被调用的扩展函数由调用函数的表达式的类型决定,而不是由在运行时计算该表达式的结果的类型决定。

另外companion object也不是虚拟的。子类永远无法访问超类的同伴。

伴随对象

自己使用的类的名称(不是作为另一个名称的限定符)充当对类的伴随对象(无论是否命名)的引用。


推荐阅读