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
Generics 基于泛型类中的序号获取枚举值_Generics_Kotlin - Fatal编程技术网

Generics 基于泛型类中的序号获取枚举值

Generics 基于泛型类中的序号获取枚举值,generics,kotlin,Generics,Kotlin,考虑以下代码: class SegmentController<E : Enum<E>>() { fun getEnumForOrdinal(ordinal: Int) : E { //values is undefined? //how can I return the enum for the specified ordinal value? return E.values()[ordinal] }

考虑以下代码:

class SegmentController<E : Enum<E>>() {

    fun getEnumForOrdinal(ordinal: Int) : E {
        //values is undefined?
        //how can I return the enum for the specified ordinal value?
        return E.values()[ordinal]
    }

    fun getOrdinalForEnum(enum: E): Int {
        //no problem getting the ordinal from the supplied E enum
        return enum.ordinal
    }

}
它是一个泛型类,将任何枚举作为模板

如何基于getEnumForOrdinal中的ordinal返回枚举值? 我希望E.values是可用的,但它不在泛型类中? 我做了研究,但无法根据我发现的顺序链接找到任何解决方案:


您可以将枚举的类作为构造函数参数传递,并通过enumConstants访问枚举值:

类分段控制器私有val clazz:类{ 有趣的GetEnumForOrdinal:Int:E{ 返回clazz.enumConstants[序号] } fun getOrdinalForEnume:Enum:Int{ 返回e序数 } } 枚举类段{A,B,C} 娱乐中心{ val controller=SegmentControllerSEGMENTS::class.java printlcontroller.getOrdinalForemSegments.B printlncontroller.getEnumForOrdinal1 } 或者,您可以将getEnumForOrdinal定义为具有具体化类型参数E的内联函数,并使用enumValues访问枚举值:

类分段控制器{ 内联有趣的GetEnumForOrdinal:Int:E{ 返回枚举值[序号] } fun getOrdinalForEnume:Enum:Int{ 返回e序数 } } 枚举类段{A,B,C} 娱乐中心{ val控制器=分段控制器 printlcontroller.getOrdinalForemSegments.B printlncontroller.getEnumForOrdinal1 } 另见:

这是对具体化关键字的极好解释

我希望E.values是可用的,但它不在 通用类


值方法在枚举中不可用

回答得很好!