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
相关产品推荐
相关产品推荐

