【问题标题】:Kotlin Generic Function With Enum Constraint具有枚举约束的 Kotlin 泛型函数
【发布时间】:2021-03-01 20:57:48
【问题描述】:

我想做如下的事情:

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

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

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

【问题讨论】:

    标签: kotlin generics enums companion-object


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      如果您不能按照@marstran 的回答将其设为reified,则需要传递Class 并调用Enum.valueOf(此解决方案仅限于JVM) :

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

      【讨论】:

      • 我该如何调用这个函数?意思是,给定一个 EnumType,我如何将它传递给函数?
      • myFunction(EnumType::class.java, "foo")
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多