ore*_*reh 5 groovy intellij-idea
我刚刚开始练习 Groovy,我有一个与地图和 IDEA IDE 相关的问题。
Integer当我尝试用作地图的密钥时,为什么 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}
Run Code Online (Sandbox Code Playgroud)
这是因为 IntelliJ IDEA 将map变量视为 - 如果变量前面缺少Object静态类型或关键字,则 IDEA 似乎不遵循类型推断。def如果你看一下,DefaultGroovyMethods你会发现只有一种类型getAt实现了方法Object:
public static Object getAt(Object self, String property) {
return InvokerHelper.getProperty(self, property);
}
Run Code Online (Sandbox Code Playgroud)
这就是 IDEA 警告您缺少方法的原因,getAt(Object self, Integer property)因为它不知道map实际上是 aMap而不是Object。
请遵循 Groovy 官方指南:
变量可以使用其类型(如
String)或使用关键字来定义def:Run Code Online (Sandbox Code Playgroud)String x def o
资料来源:http ://docs.groovy-lang.org/latest/html/documentation/core-semantics.html#_variable_definition
如果您将变量定义为
def map = [:]
Run Code Online (Sandbox Code Playgroud)
IntelliJ 不会再抱怨了。
| 归档时间: |
|
| 查看次数: |
1510 次 |
| 最近记录: |