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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 03:32:36