将映射值添加到变量(Kotlin)时发生类型不匹配错误


  1. 我想把MutableMap中的一个值添加到总数中,但我一直得到类型不匹配:推断的类型是Int?但是Int是预期的错误,我不知道如何修复这个问题

  2. 我尝试将该值调用为Intmenu[item].toInt(),并在if语句中设置逻辑,以检查该项是否确实为Int,但没有任何帮助。

请参阅下面的代码

fun main() {

val order = Order()
order.placeOrder("Noodles")
}

val menu: MutableMap<String, Int> = mutableMapOf("Noodles" to 10,
"Vegetables Chef's Choice" to 5,
)
class Order {
var total = 0
fun placeOrder(vararg orderedItems: String) {
for (item in orderedItems) {
if (item in menu) {
total += menu[item]
}
}
}
}

menu[item]的调用是定义为Map<K, out V>.get(key: K): V?menu.get(item)的简写。

如果在映射中找不到具有指定键的元素,则返回null

如果返回值为空,您可以通过提供默认值来解决此问题,例如:

total += menu[item] ?: 0

Map<K, out V>还提供了替代方案,其提供Int而不是Int?。当没有具有给定键的元素时,可以使用getValue(key: K): V,它抛出NoSuchElementException。或者,您可以使用getOrElse(key: K, defaultValue: () -> V): VgetOrDefault(key: K, defaultValue: V): V,它们都提供回退值而不是null。

以下不同备选方案的示例:

total += menu.getValue(item)
total += menu.getOrElse(item) { 0 }
total += menu.getOrDefault(item, 0)

相关内容

最新更新