Kotlin 为枚举类值方法定义接口

lor*_*nzo 3 enums interface class kotlin

如果我定义一个枚举类,让我们说:

enum class MyEnum { }
Run Code Online (Sandbox Code Playgroud)

我可以执行以下操作,因为枚举类都有一个values方法:

val values = MyEnum.values()
Run Code Online (Sandbox Code Playgroud)

现在我希望我的枚举实现一个接口并可以访问 values() 方法:

enum class MyEnum : EnumInterface { }

interface EnumInterface {
    fun values() : Array<T>

    fun doStuff() {
        this.values()
    }

}
Run Code Online (Sandbox Code Playgroud)

这不会编译,我确定如何键入 values 方法。是否可以定义这样的接口?谢谢!

asm*_*dey 5

你真的很接近正确答案。您需要定义通用接口,并且您的 enum 应该使用 enum 的类来扩展它,如下所示:

enum class MyEnum : EnumInterface<MyEnum> {
    A,B,C;
    override fun valuesInternal() = MyEnum.values()
}

interface EnumInterface<T> {    
    fun valuesInternal():Array<T>

    fun doStuff() {
        this.valuesInternal()
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @lorenzo 遗憾的是,您无法将值设置为覆盖方法,这就是它不起作用的原因。 (2认同)