我正在尝试使用以下简单函数扩展Enum随播对象:
fun Enum.Companion.myFun() = 1
但是,当我尝试在枚举State
上调用它时,Kotlin不知道。
State.myFun()
我可以看到它适用于Enum.myFun()
,但这不是我所需要的。
答案 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
也不是虚拟的。子类将永远无法访问超类的同伴。
本身使用的类的名称(而不是其他名称的限定词)充当对该类的伴随对象(无论是否命名)的引用。
答案 1 :(得分:1)
您不想在静态类(伴侣对象)上创建扩展 您要在枚举的实例上创建扩展。
尝试:
package.json