Sono nuovo a Groovy, e ho una domanda per quanto riguarda l'uso di carta:mappa Groovy e mappa Java su generici
so che posso fare:
def map = [key:"value"]
Ma che cosa significa significa se faccio questo:
Map<String, String> map = ["1":1, "2":"2"]
questo codice viene compilato, ma la mappa non è in realtà una mappa String> stringa:
map.each({println it.key + ":" + it.value + "[" + it.value.class + "]"})
esso stampa:
1:1[class java.lang.Integer]
2:2[class java.lang.String]
Può chiunque mi aiuta a capire come mai una mappa in modo esplicito digitato con String> String può essere assegnato a un oggetto mappa che contiene String> Intero? Grazie!
Aggiornamento === ===
Grazie per il link fornito da @GrailsGuy, se sto usando @TypeChecked per il codice di cui sopra avvolto in un metodo, si genera un errore:
[Static type checking] - Incompatible generic argument types. Cannot assign java.util.Map <java.lang.String, java.io.Serializable> to: java.util.Map <String, String>
La spiegazione ha perfettamente senso ora.
hmm ... allora qual è il punto di consentire sintassi generica in Groovy? – ZhongYu
@ zhong.j.yu Per mantenere il controllo della sintassi del compilatore heppy. L'applicazione di tipo molto piccolo è fatta soprattutto al momento della compilazione. Groovy è molto sciolto in termini di applicazione dei tipi e fa ampio uso dei tipi 'Object ' – Reimeus
non sarebbe più felice il compilatore se non supporta affatto i generici? – ZhongYu