Kotlin:Enum伴随函数

时间:2019-02-12 08:51:05

标签: kotlin

我正在尝试使用以下简单函数扩展Enum随播对象:

fun Enum.Companion.myFun() = 1

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

State.myFun()

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

2 个答案:

答案 0 :(得分:4)

这是不可能的。您必须分别声明 <RadioButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:layoutDirection="rtl" android:text="English" android:textSize="24dp" /> 和任何其他子类的伴随对象。

Extensions are resolved statically

  

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

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

Companion Objects

  

本身使用的类的名称(而不是其他名称的限定词)充当对该类的伴随对象(无论是否命名)的引用。

答案 1 :(得分:1)

您不想在静态类(伴侣对象)上创建扩展 您要在枚举的实例上创建扩展。

尝试:

package.json