Groovy 为什么foreach循环中的HashMap#get()返回null?
对于Groovy 为什么foreach循环中的HashMap#get()返回null?,groovy,Groovy,对于groovy-v:groovy版本:1.8.6 JVM:1.6.0\u 26供应商:Sun Microsystems Inc.操作系统:Linux: def map = new HashMap() def keyVariable = "a" def valueVariable = "b" map.put("${keyVariable}", valueVariable) for (String key : map.keySet()) { println map.get(key) }
groovy-v
:groovy版本:1.8.6 JVM:1.6.0\u 26供应商:Sun Microsystems Inc.操作系统:Linux
:
def map = new HashMap()
def keyVariable = "a"
def valueVariable = "b"
map.put("${keyVariable}", valueVariable)
for (String key : map.keySet()) {
println map.get(key)
}
这将打印
null
。有人能解释为什么Groovy找到了键,但不能通过同一个键找到相应的值吗?问题中的代码没有为我打印null
(Groovy 2.1.6)
在编辑之后,问题是Groovy模板化的字符串会产生非常糟糕的映射键
更惯用的Groovy应该是:
def map = [:]
def keyVariable = "a"
def valueVariable = "b"
map[ keyVariable ] = valueVariable
map.each { key, value ->
println value
}
// Or
map.keySet().each { key ->
println map[ key ]
}
根据我的测试,这不会打印
null
,它对我有效。你的设置是什么?我的是Groovy版本:2.1.5 JVM:1.8.0-ea供应商:Oracle公司OS:Linux
我怀疑我提出了一个简单的示例来发布到StackOverflow,您已经删除了导致问题的东西;-)对不起大家;我已经修复了代码,所以它会重现我实际遇到的情况。Groovy模板字符串会导致非常糟糕的映射键,因为等式实际上不起作用。。。一种解决方法是map.put(“${keyVariable}”.toString(),valueVariable)
@william.berg Ahh是的,Groovy模板字符串会产生非常糟糕的映射键:-(