高阶函数作为枚举参数

unl*_*101 5 enums kotlin

我想使用高阶函数作为枚举参数。但这行不通。我有以下声明:

enum class Enum(val someValue: Int, val someMethod: () -> Unit)
{
    FIRST_VALUE(0, {method0()}),
    SECOND_VALUE(1, {method1()})

    fun method0() {

    }

    fun method1() {

    }
}
Run Code Online (Sandbox Code Playgroud)

但又method0()找不到method1()。错误是Unresolved reference: method0.

是否可以通过枚举来实现这一点?

mar*_*ran 5

里面方法的类型EnumEnum.() -> Unit,不是() -> Unit。如果你改变参数类型它就会起作用。

请注意,您还可以使用 的方法引用Enum::method0,而不是创建新的 lambda。它更具可读性。

enum class Enum(val someValue: Int, val someMethod: Enum.() -> Unit) {
    FIRST_VALUE(0, Enum::method0), // Using a method reference
    SECOND_VALUE(1, {method1()})

    fun method0() {

    }

    fun method1() {

    }
}
Run Code Online (Sandbox Code Playgroud)