带有整数键的Groovy映射 - ' getAt'在DefaultGroovyMethods中无法应用于(java.lang.Integer)

时间:2018-06-06 15:42:11

标签: intellij-idea groovy

我刚刚开始练习Groovy,我有一个与地图和IDEA IDE相关的问题。

当我尝试将struct用作地图的关键字时,为什么IDEA会向我显示以下通知?这个简单的Groovy脚本工作正常并打印出正确的结果。

screenshot

Integer

1 个答案:

答案 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不再抱怨了。