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是可用的,但它不在 通用类
值方法在枚举中不可用 回答得很好!