簡體   English   中英

Generics上的Groovy地圖和Java地圖

[英]Groovy map and Java map on Generics

我是Groovy的新手,我對使用map有疑問:

我知道我能做到:

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>

這個解釋現在很有意義。

這個論壇帖子談論Groovy忽略泛型,特別是:

Groovy是一種動態類型語言,但您可以靜態聲明變量類型。 JVM上的泛型在編譯時被擦除,只有原始類型可供VM使用(對於groovy和Java都是如此)。 在Java中,有編譯時檢查以確保您不將int填充到字符串列表中。 但是,Groovy不會在編譯時檢查類型。

因此,這意味着在編譯時不檢查type參數,並且在運行時不可用。

埃里克,

我懷疑這是由此處此處解釋的類型擦除引起的。 由於groovy被編譯為字節代碼,因此在字節代碼級別刪除參數化類型。 從而,

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

因此它由鍵和對象值組成。這就是為什么groovy代碼編譯和運行沒有錯誤的原因。 希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM