使用?.get访问Kotlin映射参数时出现'Unresolved reference'错误
问题根源
错误的核心是嵌套Map的类型推断失效:如果你的mobs变量没有显式指定类型,Kotlin会自动把内层所有值的类型推断为Any。当你调用mobs["dragon"]?.get("spawnRate")后,返回的是Any?类型,而Any并没有get()方法,IDE才会弹出不相关的候选方法提示。
解决方法
方法一:显式指定Map类型+安全类型转换
先给mobs明确嵌套Map的类型,再对深层值做安全转换:
// 显式定义mobs的类型 val mobs: Map<String, Map<String, Any>> = mapOf( "dragon" to mapOf( "spawnRate" to mapOf("hill" to 1.01), "drops" to mapOf( "dragon scale" to mapOf("quantity" to listOf(1,10)), "dragon egg" to 0.01, "dragon head" to 1.01, ), "exp" to listOf(1, 4), "dmg" to listOf(35,75), ) ) // 安全转换后访问spawnRate val dragonSpawnRate = (mobs["dragon"]?.get("spawnRate") as? Map<String, Double>)?.get("hill") println("Dragon Spawn Rate: $dragonSpawnRate")
as?会在类型不匹配时返回null,避免抛出异常。
方法二:用数据类替代嵌套Map(推荐)
嵌套Map可读性差且类型不安全,换成数据类能彻底解决这类问题:
// 定义对应的数据类 data class Mob( val spawnRate: Map<String, Double>, val drops: Map<String, Any>, val exp: List<Int>, val dmg: List<Int> ) // 初始化mobs val mobs = mapOf( "dragon" to Mob( spawnRate = mapOf("hill" to 1.01), drops = mapOf( "dragon scale" to mapOf("quantity" to listOf(1,10)), "dragon egg" to 0.01, "dragon head" to 1.01 ), exp = listOf(1,4), dmg = listOf(35,75) ) ) // 直接通过属性访问,类型完全安全 val dragonSpawnRate = mobs["dragon"]?.spawnRate?.get("hill") println("Dragon Spawn Rate: $dragonSpawnRate")
内容的提问来源于stack exchange,提问作者Nejk
相关产品推荐
相关产品推荐

