为什么对containsKey()的调用在此groovy映射中失败?
我想我把这些声明搞砸了,但我有一个groovy类,它的字段定义如下:为什么对containsKey()的调用在此groovy映射中失败?,groovy,linkedhashmap,gstring,Groovy,Linkedhashmap,Gstring,我想我把这些声明搞砸了,但我有一个groovy类,它的字段定义如下: Map<String, SomeType> _someField = [:] _someField.put( someStringVariable, someTypeInstance ) …然后,当我检查是否存在我知道已映射的密钥时,检查失败: _someField.containsKey( someStringVariable ) 我成功的唯一方法是调用toString(),如下所示: _someField
Map<String, SomeType> _someField = [:]
_someField.put( someStringVariable, someTypeInstance )
…然后,当我检查是否存在我知道已映射的密钥时,检查失败:
_someField.containsKey( someStringVariable )
我成功的唯一方法是调用toString()
,如下所示:
_someField.containsKey( someStringVariable.toString() )
我使用的是映射的泛型声明,因此我的IDE可以自动完成值类型,所以我真的希望(我认为)将类型信息保留在那里
我已尝试将键类型从String
更改为GString
,但没有效果。我尝试将映射初始化从groovy速记[:]
更改为新LinkedHashMap
,但也没有成功
你知道我是否可以保留类型信息并避免使用
toString()
?,所以这是一个将变量馈送到containsKey()的情况
在失败的实例中,类型为org.codehaus.groovy.runtime.GStringImpl
,因为它们是由对映射值执行变量扩展的函数生成的,该函数正在为值而不是JavaString
s创建groovy插值字符串
对变量类型的快速检查确认了类型问题,然后只需追溯到插值字符串的来源。我完全不知道groovy员工发现的问题和做出的设计决策,我想他们已经发现并解决了很多我无法想象的问题。也就是说:通过重写GString的“hashCode”方法以匹配等价字符串的值,手头的问题难道不能很容易地解决吗?