2013-04-02 34 views
8

ben Groovy yeni değilim ve haritanın kullanımı ile ilgili bir sorum var:Groovy haritası ve Java haritası Jenerik

biliyorum Yapabileceğim:

def map = [key:"value"]

Ama ne yapar eğer bunu yaparsam anlama:

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

Bu kod derler, ancak harita gerçekten sTRING> Dize haritası değildir:

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

O yazdırır:

1:1[class java.lang.Integer]

2:2[class java.lang.String]

Can kimse bana> Dize STRING> Tamsayı içeren bir harita nesnesine atanabilir açıkça STRING ile yazılan bir harita gelip anlamasına yardımcı olan? Teşekkür ederim!

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

: Ben bir yönteme sarılmış yukarıdaki kodu için @TypeChecked kullanıyorum eğer @GrailsGuy tarafından sağlanan bağlantıdan

=== Güncelleme ===

sayesinde, bu bir hata atar

açıklama şimdi çok mantıklı.

cevap

6

Bu forum post görüşmeler:

Groovy is a dynamically typed language, but you can statically declare the types of variables. Generics on the JVM are erased at compile time and only the raw type is available to the VM (this is true both for groovy and Java). In Java, there is compile time checking to ensure that you don't stuff an int into a list of strings. But, Groovy does not check types at compile time.

So, this means that the type parameter is not checked at compile time and not available at runtime.

+0

hmm ... o zaman harika jenerik sözdizimi izin ne anlamı var? – ZhongYu

+1

@ zhong.j.yu Derleyici sözdizimi denetleyicisini tutmak için heppy. Özellikle derleme zamanında çok az türde uygulama yapılır. Groovy tip uygulama açısından çok gevşek ve 'Nesnesi' türlerinin geniş kullanımı o hiç jenerikleri desteklemiyorsa – Reimeus

+0

derleyici daha mutlu olmaz yapar? – ZhongYu

1

Eric

Bu tip silinmeye neden here ve here açıklanmıştır şüpheli. Yüce bayt koduna derlendiği için bayt kod düzeyinde parametreli tipler kaldırılır. Bu nedenle,

Map<String, String> objMap is compiled into Map objMap.

Böylece tuşları tarafından bestelenen ve values.This harika kod derler ve hatasız çalıştığını nedeni budur nesne edilir. Bu yardımcı olur umarım. Özellikle Groovy görmezden jenerik hakkında