Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么对containsKey()的调用在此groovy映射中失败?_Groovy_Linkedhashmap_Gstring - Fatal编程技术网

为什么对containsKey()的调用在此groovy映射中失败?

为什么对containsKey()的调用在此groovy映射中失败?,groovy,linkedhashmap,gstring,Groovy,Linkedhashmap,Gstring,我想我把这些声明搞砸了,但我有一个groovy类,它的字段定义如下: Map<String, SomeType> _someField = [:] _someField.put( someStringVariable, someTypeInstance ) …然后,当我检查是否存在我知道已映射的密钥时,检查失败: _someField.containsKey( someStringVariable ) 我成功的唯一方法是调用toString(),如下所示: _someField

我想我把这些声明搞砸了,但我有一个groovy类,它的字段定义如下:

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
,因为它们是由对映射值执行变量扩展的函数生成的,该函数正在为值而不是Java
String
s创建groovy插值字符串


对变量类型的快速检查确认了类型问题,然后只需追溯到插值字符串的来源。

我完全不知道groovy员工发现的问题和做出的设计决策,我想他们已经发现并解决了很多我无法想象的问题。也就是说:通过重写GString的“hashCode”方法以匹配等价字符串的值,手头的问题难道不能很容易地解决吗?