我刚刚开始练习Groovy,我有一个与 Map 和IDEA IDE相关的问题 .
当我尝试使用 Integer
作为 Map 的键时,为什么IDEA会向我显示以下通知?这个简单的Groovy脚本工作正常,打印正确的结果 .
list = [4, 7, 3, 7, 7, 1, 4, 2, 4, 2, 7, 5]
map = [:]
list.each {
t = map[(it)]
map[(it)] = t != null ? t + 1 : 1
}
map.each {key, value -> if (value == 1) println key}
1 回答
这是因为IntelliJ IDEA将
map
变量视为Object
- 如果在变量前面缺少静态类型或关键字def
,似乎IDEA不遵循类型推断 . 如果你看一下DefaultGroovyMethods
,你会发现Object
类型只有一种方法getAt
:这就是IDEA警告你缺少方法
getAt(Object self, Integer property)
的原因,因为它不知道map
实际上是Map
而不是Object
.请遵循官方Groovy的指导原则:
如果将变量定义为
IntelliJ不再抱怨了 .