6

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ます。

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 に答える