我想我正在用这些声明搞砸一些东西,但是我有一个带有这样定义的字段的groovy课:
Map<String, SomeType> _someField = [:]
我确实插入这样的材料:
_someField.put( someStringVariable, someTypeInstance )
...然后稍后,当我检查是否存在映射的键时,支票失败:
_someField.containsKey( someStringVariable )
我能获得成功的唯一方法是致电toString()
,就像这样:
_someField.containsKey( someStringVariable.toString() )
我正在使用地图的通用声明,因此我的IDE使我对价值类型进行了自动完成,所以我真的很喜欢(我认为(将类型的信息保留在此处。
我尝试将密钥类型从String
更改为GString
,但无济于事。我尝试将地图初始化从Groovy Shorthand [:]
更改为new LinkedHashMap<>
,也无济于事。
有什么想法我是否可以保留类型信息并避免使用toString()
?
因此,在这种情况下,在失败的情况下,将变量馈送到 containsKey()
的情况下是 org.codehaus.groovy.runtime.GStringImpl
类型,因为它们是由在地图值上执行变量扩展的函数生成的该功能是为值而不是Java String
s。
快速检查变量的类型已确认了类型问题,然后只是跟踪回去插值字符串的来源的问题。