我想使用高阶函数作为枚举参数。但这行不通。我有以下声明:
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.
是否可以通过枚举来实现这一点?
里面方法的类型Enum是Enum.() -> 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)
| 归档时间: |
|
| 查看次数: |
779 次 |
| 最近记录: |