Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Class Kotlin为枚举类值方法定义接口_Class_Kotlin_Enums_Interface - Fatal编程技术网

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

Class Kotlin为枚举类值方法定义接口,class,kotlin,enums,interface,Class,Kotlin,Enums,Interface,如果我定义了一个枚举类,那么假设: enum class MyEnum { } 我可以执行以下操作,因为枚举类都有一个values方法: val values = MyEnum.values() 现在,我希望我的枚举实现一个接口,并可以访问values()方法: enum类MyEnum:EnumInterface{} 接口枚举接口{ fun values():数组 fundostuff(){ 这个值是() } } 这不会编译,我知道如何键入values方法。是否可以定义这样的接口?谢谢 你

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

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

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

enum类MyEnum:EnumInterface{}
接口枚举接口{
fun values():数组
fundostuff(){
这个值是()
}
}

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

你离正确答案很近了。您需要定义泛型接口,并且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()
    }
}
枚举类MyEnum:EnumInterface{ A、 B,C; 重写fun valuesInternal()=MyEnum.values() } 接口枚举接口{ fun valuesInternal():数组 fundostuff(){ 此.valuesInternal() } }
感谢您的回复!MyEnum为空时,它会编译,但不幸的是,在添加case时,它不会编译。我希望避免valuesInternal()实现,但它完成了任务,谢谢!)@lorenzo遗憾的是,您不能将值作为覆盖方法,这就是它无法工作的原因。
enum class MyEnum : EnumInterface<MyEnum> {
    A,B,C;
    override fun valuesInternal() = MyEnum.values()
}

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

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