Kotlin列表类型推断问题:解决索引类型不匹配错误
解决Kotlin列表索引类型不匹配问题
问题根源在于listOf("Money", 1)会被Kotlin自动推断为List<Any>类型,导致mod[1]的类型是Any,而splitSave的索引要求是Int,类型不匹配引发编译错误。以下是几种可行的解决方案:
方法1:用Pair替代列表(推荐)
你的mod本质是字符串与整数的配对,使用Pair比列表更贴合场景,类型推断更精准:
val mod = "Money" to 1 // 自动推断为Pair<String, Int> val splitSave = List(113) { "Item $it" } // 示例字符串列表 println("${mod.second}: ${splitSave[mod.second]}")
mod.second的类型直接是Int,可直接作为索引使用,无类型问题。
方法2:显式类型转换(保留列表结构)
如果必须使用列表,可在使用mod[1]时显式转换为Int:
val mod = listOf("Money", 1) val splitSave = List(113) { "Item $it" } // 确保mod[1]确实为Int的前提下强转 println("${mod[1]}: ${splitSave[mod[1] as Int]}")
为避免类型转换异常,建议先做类型检查:
val index = mod[1] if (index is Int) { println("$index: ${splitSave[index]}") } else { println("无效的索引类型") }
方法3:显式指定列表类型边界
给mod指定包含String和Int的公共父类型,再配合类型转换使用:
val mod: List<Comparable<*>> = listOf("Money", 1) val splitSave = List(113) { "Item $it" } val index = mod[1] as Int println("$index: ${splitSave[index]}")
这种方法仅在必须使用列表的场景下考虑,可读性不如前两种。
内容的提问来源于stack exchange,提问作者Landon Kuehner
相关产品推荐
相关产品推荐

