2

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

Map<String, SomeType> _someField = [:]

我做这样的插入:

_someField.put( someStringVariable, someTypeInstance )

...然后,当我检查我知道已映射的键是否存在时,检查失败:

_someField.containsKey( someStringVariable )

我能让这个成功的唯一方法是调用toString(),如下所示:

_someField.containsKey( someStringVariable.toString() )

我正在使用映射的通用声明,因此我的 IDE 为我提供了值类型的自动完成功能,所以我真的很想(我认为)将类型信息保留在那里。

我尝试将密钥类型从Stringto更改为GString,但无济于事。我尝试将地图初始化从 groovy 速记[:]更改为new LinkedHashMap<>,但也无济于事。

我是否可以保留类型信息并避免使用的任何想法toString()

4

1 回答 1

3

因此,在这种情况下,在containsKey()失败的实例中输入的变量是类型的,org.codehaus.groovy.runtime.GStringImpl因为它们是由对映射值执行变量扩展的函数生成的,并且该函数正在为值而不是 Java 创建 groovy 插值字符串Strings。

快速检查变量的类型确认了类型问题,然后只需回溯即可找到内插字符串的来源。

于 2018-03-31T00:10:47.753 回答