我想我正在搞砸这些声明,但我有一个groovy类,其字段定义如下:
Map<String, SomeType> _someField = [:]
我这样插入:
_someField.put( someStringVariable, someTypeInstance )
...然后,当我检查是否已经映射了我知道的密钥时,检查失败:
_someField.containsKey( someStringVariable )
我能让这个成功的唯一方法就是调用toString()
,如下所示:
_someField.containsKey( someStringVariable.toString() )
我正在使用地图的通用声明,所以我的IDE让我自动完成值类型,所以我真的希望(我认为)在那里保留类型信息。
我已尝试将密钥类型从String
更改为GString
,但无济于事。我已经尝试将地图初始化从常规速记[:]
更改为new LinkedHashMap<>
,也无济于事。
是否可以保留类型信息并避免使用toString()
?
答案 0 :(得分:1)
所以这种情况是在失败的实例中输入containsKey()
的变量属于org.codehaus.groovy.runtime.GStringImpl
类型,因为它们是由对地图值执行变量扩展的函数生成的,并且该函数正在为值而不是Java String
创建groovy插值字符串。
快速检查变量的类型确认了类型问题,然后只需跟踪回来找到插值字符串的来源。