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

时间:2019-05-14 09:21:32

标签: class kotlin enums interface

如果我定义了一个枚举类,那么说:

enum class MyEnum { }

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

val values = MyEnum.values()

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

enum class MyEnum : EnumInterface { }

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

    fun doStuff() {
        this.values()
    }

}

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

1 个答案:

答案 0 :(得分:2)

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

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

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

    fun doStuff() {
        this.valuesInternal()
    }
}