You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin when表达式Type inference failed类型推断失败问题咨询

Kotlin when表达式in判断类型推断失败解决方法

问题复现

报错相关代码:

val finalValue: Array<String> = arrayOf("A", "B", "C", "D")
when (value) {
  in finalValue  -> println("Pass")
  !in finalValue -> println("Not Pass")
}

报错信息:

Error: Kotlin: Type inference failed. The value of the type parameter
T should be mentioned in input types (argument types, receiver type or
expected type). Try to specify it explicitly.

根因说明

in操作符本质是调用数组的contains泛型方法,编译器无法推断泛型参数T的具体类型,原因是value的类型和数组元素类型String不匹配/未明确,导致编译器无法确认两者是否可以进行包含判断。

解决方法

  • 方法1:显式声明value的类型为String,和数组元素类型保持一致
    示例代码:
    val value: String = "A" // 补全value的类型声明
    val finalValue: Array<String> = arrayOf("A", "B", "C", "D")
    when (value) {
      in finalValue  -> println("Pass")
      !in finalValue -> println("Not Pass")
    }
    
  • 方法2:将value转成String类型后再进行判断
    示例代码:
    val finalValue: Array<String> = arrayOf("A", "B", "C", "D")
    when (value.toString()) { // 调用toString()统一类型
      in finalValue  -> println("Pass")
      !in finalValue -> println("Not Pass")
    }
    
  • 方法3:直接调用contains方法代替in语法糖,避开类型推断问题
    示例代码:
    val finalValue: Array<String> = arrayOf("A", "B", "C", "D")
    when {
      finalValue.contains(value)  -> println("Pass")
      else -> println("Not Pass")
    }
    

内容的提问来源于stack exchange,提问作者Dendi Prayogo Hidayat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 14:48:03