Kotlin:枚举伴随函数

Voj*_*ěch 1 kotlin

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

fun Enum.Companion.myFun() = 1
Run Code Online (Sandbox Code Playgroud)

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

State.myFun()
Run Code Online (Sandbox Code Playgroud)

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

tyn*_*ynn 5

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

扩展是静态解析的

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

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

伴随对象

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

  • 这是非常悲伤的:/ (2认同)