【发布时间】:2021-03-21 15:34:56
【问题描述】:
这是食谱应用程序的一部分。我在我写的食谱课上。成分是我写的另一门课。想法是将成分及其数量(作为 Int)存储在地图中。
在类主体中,我已将地图声明为:
var ingredients: Map<Ingredient, Int>
在 init{} 正文中:
ingredients = mutableMapOf<Ingredient, Int>()
问题来了——这个功能是添加一种成分。如果成分已经在地图中,它会更新数量。 put() 方法应该这样做,但 Android Studio 将其变为红色,当我将鼠标悬停在“put”一词上时,它显示“未解析的引用:put”。加号也有红色下划线。我认为这是可变映射的基本部分。我哪里出错了? (别担心 - 会有一个“其他”部分!)
fun addIngredientAndAmount(ingredient: Ingredient, quantity: Int) {
if (ingredients.containsKey(ingredient)) {
val oldQuantity = ingredients[ingredient]
ingredients.put(ingredient, oldQuantity + quantity)
}
}
【问题讨论】:
-
您将该属性标记为
Map,而不是MutableMap。即使底层对象碰巧是可变的,编译器也只能看到属性类型。但是为什么要在单独的init块中初始化属性呢? -
我们正在初始化 init 块中的一些其他内容,因此它看起来更整洁一些。另外,这是我们第一次在项目中使用 Kotlin,我们对 Java 更习惯了一点。就上下文而言,这是作为大师的一部分的小组项目。
标签: dictionary kotlin mutable