具有枚举约束的 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
//...
}
我想做如下事情:
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
//...
}