[英]cast LinkedHashMap to HashMap in groovy
如何在groovy中将LinkedHashMap
转换为java.util.HashMap
?
当我在groovy中创建这样的东西时,它会自动创建一个LinkedHashMap
即使我声明它像HashMap h = ....
或def HashMap h = ...
我试过做:
HashMap h = ["key1":["val1", "val2"], "key2":["val3"]]
和
def HashMap h = ["key1":["val1", "val2"], "key2":["val3"]]
h.getClass().getName()
仍然返回LinkedHashMap
。
简单的答案 - 地图有一些看起来很像复制构造函数:
Map m = ['foo' : 'bar', 'baz' : 'quux'];
HashMap h = new HashMap(m);
所以,如果你坚持使用文字符号,但你必须有一个不同的实现,这将完成这项工作。
但真正的问题是,为什么你关心底层实现是什么? 你甚至不应该关心它是一个HashMap。 它实现Map接口的事实应该足以满足任何目的。
他可能被可怕的Groovy-Map-Gotcha抓住了,并且在整个下午的旷野中磕磕绊绊。
这是交易:
使用变量字符串键时,您无法以属性表示法格式访问地图(例如map.abc),这是Groovy中出乎意料的事情,其中一切都非常简洁和精彩; - )
解决方法是将变量键包装在parens而不是引号中。
def(a,b,c) = ['foo','bar','baz']
Map m = [(a):[(b):[(c):1]]]
println m."$a"."$b"."$c" // 1
println m.foo.bar.baz // also 1
像这样创建地图将为全世界的虐待狂带来极大的乐趣:
Map m = ["$a":["$b":["$c":1]]]
希望这可以从临时疯狂中拯救另一个Groovy-ist ......
HashMap h = new HashMap()
h.getClass().getName();
作品。 使用[:]表示法似乎将它绑定到LinkedHashMap。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.