具有枚举约束的 Kotlin 泛型函数

Kotlin Generic Function With Enum Constraint

我想做如下事情:

inline fun<T: Enum<T>> myFunction(enumStr: String){
    T.valueOf(enumStr)
    //...
}

这样我的通用参数就被限制为枚举 class 类型,这样我就可以访问 valueOf 函数。我收到一条错误消息:
Type parameter 'T' cannot have or inherit a companion object, so it cannot be on the left hand side of dot

我的理解是我不能在泛型上使用伴随对象函数。有什么方法可以实现我想要的 - 将字符串转换为通用枚举?

如果您具体化类型参数,则可以使用 enumValueOf 函数 (doc here)。 像这样:

inline fun <reified T: Enum<T>> myFunction(enumStr: String) {
    val enumValue = enumValueOf<T>(enumStr)
    //...
}

如果你不能像@marstran的回答那样reified,你需要传递一个Class并调用Enum.valueOf(此解决方案仅限于 JVM):

inline fun<T: Enum<T>> myFunction(enumClass: Class<T>, enumStr: String) {
    val value = Enum.valueOf(enumClass, enumStr) // T
    //...
}