gpt4 book ai didi

intellij-idea - 带有整数键的 Groovy 映射 - DefaultGroovyMethods 中的 'getAt' 不能应用于 (java.lang.Integer)

转载 作者:行者123 更新时间:2023-12-04 05:49:30 25 4
gpt4 key购买 nike

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

为什么 IDEA 在我尝试使用时会显示以下通知 Integer作为 map 的 key ?这个简单的 Groovy 脚本工作正常并打印正确的结果。

screenshot

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}

最佳答案

是因为IntelliJ IDEA看到map变量为 Object - 如果静态类型或关键字 def,IDEA 似乎不遵循类型推断在变量前面丢失。如果你看看DefaultGroovyMethods你会看到只有一种方法 getAtObject 实现类型:

public static Object getAt(Object self, String property) {
return InvokerHelper.getProperty(self, property);
}

这就是 IDEA 警告您缺少方法的原因 getAt(Object self, Integer property)因为它不知道 map实际上是 Map而不是 Object .

请遵循 Groovy 的官方指南,其中说:

Variables can be defined using either their type (like String) or by using the keyword def:

String x
def o

Source: http://docs.groovy-lang.org/latest/html/documentation/core-semantics.html#_variable_definition



如果您将变量定义为
def map = [:]

IntelliJ 不会再提示了。

关于intellij-idea - 带有整数键的 Groovy 映射 - DefaultGroovyMethods 中的 'getAt' 不能应用于 (java.lang.Integer),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50724440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com