MutableMap<键,布尔值>返回可为空的布尔值? 用于使用键进行值访问



我创建了一个映射硬映射值到false但是当我想访问它时,我得到了一个可为空的布尔值。除了我在下面的建议之外,我如何避免它?

object Keyboard{
val keys = Key.values().associate { it to false }.toMutableMap()
fun pressButtonForEvent(event : KeyEvent){
keys[event.key] = true
}
fun isPressed(key : Key) : Boolean {
return keys[key]
}
}

建议解决它(但我不喜欢它(

fun isPressed(key : Key) : Boolean {
return if (keys.containsKey(key)){
keys[key]!!
} else false
}

如果您不确定其他人是否可以将键放入您的映射中,请使用getOrElsegetOrDefault来访问这些值:

keys.getOrElse(key) { false }
keys.getOrDefault(key, false)

或者使用withDefault-wrapper: 初始化您的地图,例如:

keys = mutableMapOf<Key, Boolean>().withDefault { false } // in the end you initialize every key with false

然后可以通过getValue访问该值:

keys.getValue(key)

如果您在没有withDefault的情况下使用getValue,则如果给定键没有值,您将收到异常。在适当的withDefault设置下使用它,如果地图中没有这样的键,它将始终为您提供默认值。

最后但并非最不重要的一点是:如果你完全控制了那张地图,没有人会把其他任何东西放进去,那么keys[key]!!也可能没问题......在所有其他情况下,keys.getValue(key)可能更好,因为异常消息清楚地说明了缺少哪个键,而使用!!,您只会得到一个NullPointerException

最新更新