9

私はGroovyを初めて使用し、マップの使用に関して質問があります:

私はできることを知っています:

def map = [key:"value"]

しかし、私がこれを行うと、それはどういう意味ですか:

Map<String, String> map = ["1":1, "2":"2"]

このコードはコンパイルされますが、マップは実際には String->String マップではありません。

map.each({println it.key + ":" + it.value + "[" + it.value.class + "]"})

それは印刷します:

1:1[クラス java.lang.Integer]

2:2[クラス java.lang.String]

String->String で明示的に型指定されたマップを、String->Integer を含むマップ オブジェクトに割り当てることができる理由を理解できる人はいますか? ありがとうございました!

===更新===

@GrailsGuy によって提供されたリンクに感謝します。メソッドにラップされた上記のコードに@TypeCheckedを使用している場合、エラーがスローされます。

[Static type checking] - Incompatible generic argument types. Cannot assign java.util.Map <java.lang.String, java.io.Serializable> to: java.util.Map <String, String>

説明は今では完全に理にかなっています。

4

2 に答える 2