6

我如何转换LinkedHashMapjava.util.HashMapgroovy?

当我在 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

4

4 回答 4

8

LinkedHashMap是的子类,HashMap因此您可以将其用作HashMap.


资源 :

于 2010-09-23T17:30:16.737 回答
4

简单的答案——地图有一些看起来很像复制构造函数的东西:

Map m = ['foo' : 'bar', 'baz' : 'quux'];
HashMap h = new HashMap(m);

所以,如果你对字面表示法很执着,但你绝对必须有不同的实现,这将完成这项工作。

但真正的问题是,你为什么要关心底层实现是什么?你甚至不应该关心它是一个 HashMap。它实现 Map 接口的事实应该足以满足几乎任何目的。

于 2010-10-14T02:31:24.297 回答
2

他可能被可怕的 Groovy-Map-Gotcha 抓住了,就像我整个下午一样,在各种可能性的荒野中磕磕绊绊。

这是交易:

使用可变字符串键时,您无法访问属性表示法格式的映射(例如 map.abc),这在 Groovy 中是出人意料的,因为一切通常都简洁而精彩 ;--)

解决方法是将变量键包装在括号中而不是引号中。

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 从暂时的精神错乱中解脱出来……

于 2011-03-19T06:10:08.570 回答
1
 HashMap h = new HashMap() 
 h.getClass().getName();

作品。使用 [:] 符号似乎将其与 LinkedHashMap 联系起来。

于 2010-09-23T17:30:30.200 回答