2015-11-23 11 views
5

In Groovy uso il map literal notation abbastanza frequentemente nel mio codice ed ero curioso di sapere quale implementazione concreta fosse Map.Groovy: metodo getClass su restituzioni letterali della mappa null

Dopo aver provato un paio di cose, questo script illustra meglio la mia confusione:

def map = ["A":"B"] 
println map // I assume this avoids any lazy evaluation of the map 
println map instanceof HashMap // I tried some other impls too 
println map.class 

e ricevere questo output:

[A:B] 
true 
null 

Questo mi dice che la mappa è apparentemente un HashMap, ma il getClass il metodo non vuole dirmelo.

Quindi la mia domanda è: perché getClass restituisce null, e c'è un modo più appropriato per ottenere informazioni sulla classe di runtime da Groovy?

risposta

6

è necessario utilizzare

map.getClass() 

Come altrimenti è alla ricerca di una chiave denominata class

Quasi un duplicato di Why does groovy .class return a different value than .getClass()

+0

Bah, ho dimenticato Groovy potrebbe anche interpretare che come chiave della mappa. Grazie! – Kirie

+2

#GroovyPuzzlers, S01. – JBaruch

+1

A volte mi chiedo perché la comunità non si riunisca e eviti i linguaggi di scripting. Questo è il 30 ° "problema" che ho avuto da quando ho iniziato ad imparare Groovy, cosa che devo più o meno fare se voglio mettermi al passo con Gradle. Tutti sostengono che i linguaggi di scripting migliorano la produttività. È una presa in giro della realtà? Mentre JavaScript si muove verso l'essere fortemente tipizzato e orientato agli oggetti, i linguaggi basati sulla JVM vanno nella direzione opposta. La storia si ripete. –

Problemi correlati