我刚刚开始练习Groovy,我有一个与地图和IDEA IDE相关的问题。
当我尝试将struct
用作地图的关键字时,为什么IDEA会向我显示以下通知?这个简单的Groovy脚本工作正常并打印出正确的结果。
Integer
答案 0 :(得分:1)
这是因为IntelliJ IDEA将map
变量视为Object
- 如果在变量前面缺少静态类型或关键字def
,则IDEA似乎不会遵循类型推断。如果您查看DefaultGroovyMethods
,您会看到getAt
类型只实施了一种方法Object
:
public static Object getAt(Object self, String property) {
return InvokerHelper.getProperty(self, property);
}
这就是IDEA警告您缺少方法getAt(Object self, Integer property)
的原因,因为它不知道map
实际上是Map
而不是Object
。
请遵循Groovy的官方指南:
可以使用类型(例如
String
)或使用关键字def
来定义变量:String x def o
来源:http://docs.groovy-lang.org/latest/html/documentation/core-semantics.html#_variable_definition
如果您将变量定义为
def map = [:]
IntelliJ不再抱怨了。