繁体   English   中英

根据键名获取值时,地图返回null

[英]Map returns null when getting value based on key name

在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不是String,而是org.codehaus.groovy.runtime.GStringImpl 有人知道为什么将其强制转换为此类而不是String吗?

初始地图的创建方法如下:

result = ["${key}": value]

以下代码确实有效。

map = ['key1': 'param1']
assert 'param1' == map['key1']

更新后的问题

关键实际上不是字符串。 toString()将为您提供字符串String ,可以用作键

GString(groovy.lang.GString)在其他编程语言中也称为内插字符串。 "${key}"是一个GString,但是"${key}".toString()是一个String。 这里更多细节

以下方法可以解决您的问题

def key = 'key1'
def a = "${key}"  // or a = "${key}".toString()
def result = [:]
result[a] = 'param1'
println result.key1 // or result['key1']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM