我是Groovy的新手,我对使用map有疑问:
我知道我能做到:
def map = [key:"value"]
但是如果我这样做是什么意思:
Map<String, String> map = ["1":1, "2":"2"]
此代码编译,但地图实际上不是String-&gt; String map:
map.each({println it.key + ":" + it.value + "[" + it.value.class + "]"})
打印:
1:1 [类java.lang.Integer]
2:2 [class java.lang.String]
任何人都可以帮助我理解如何使用String-&gt;显式地键入地图?可以将字符串分配给包含String-&gt; 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>
现在解释很有道理。
答案 0 :(得分:8)
这篇forum post讨论了Groovy忽略泛型,特别是:
Groovy是动态类型的 语言,但您可以静态声明变量的类型。 JVM上的泛型在编译时被擦除,只有原始类型 可用于VM(对于groovy和Java都是如此)。在 Java,有编译时检查,以确保你没有东西 int到字符串列表中。但是,Groovy不会检查类型 编译时间。
因此,这意味着在编译时不会检查type参数 并且在运行时不可用。
答案 1 :(得分:2)