代码之家  ›  专栏  ›  技术社区  ›  Vojtěch

kotlin:枚举伴随函数

  •  0
  • Vojtěch  · 技术社区  · 5 年前

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

    fun Enum.Companion.myFun() = 1
    

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

    State.myFun()
    

    我能看到它的作用 Enum.myFun() 但这不是我需要的。

    2 回复  |  直到 5 年前
        1
  •  3
  •   tynn    5 年前

    遗憾的是,这是不可能的。你得申报一个同伴 State 以及任何其他子类。

    Extensions are resolved statically

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

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

    Companion Objects

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

        2
  •  1
  •   TomH    5 年前

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

    尝试:

    fun Enum.myFun() = 1