在Jenkins管道中运行时,关于从Grovvy中的LinkedHashMap获取值有一个非常奇怪的问题。
我有一张这样的地图:map = ['key1': 'param1']
现在,我想获取key1的值,所以我叫map.get('key1')
或map['key1']
。令人惊讶的是,它们都返回null
。
当我尝试致电map.keySet()
时,它将返回key1
。最有趣的是,当我致电map.get(map.keySet()[0])
时,它会按预期返回param1
。
那么直接map.get('key1')
怎么可能不起作用?
更新:
经过一番调查,我发现key1
不是字符串,而是org.codehaus.groovy.runtime.GStringImpl
。有人知道为什么将其强制转换为此类而不是String吗?
这是创建初始地图的方式:
result = ["${key}": value]
答案 0 :(得分:0)
以下代码确实有效。
map = ['key1': 'param1']
assert 'param1' == map['key1']
问题更新后
键实际上不是字符串。 toString()
会以String
的形式提供给您,可以用作密钥
答案 1 :(得分:0)
GStrings(groovy.lang.GString),在其他编程语言中也称为插值字符串。 "${key}"
是GString,但是"${key}".toString()
是String。详情请访问here
以下方法可以解决您的问题
def key = 'key1'
def a = "${key}" // or a = "${key}".toString()
def result = [:]
result[a] = 'param1'
println result.key1 // or result['key1']