2015-11-23 6 views
5

In Groovy verwende ich die map literal notation ziemlich häufig in meinem Code, und war neugierig, welche konkrete Implementierung von Map es war.Groovy: getClass-Methode auf Karte Literal gibt Null zurück

Nach ein paar Dinge zu versuchen, dieses Skript zeigt am besten meine Verwirrung:

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 

und erhalten diese Ausgabe:

[A:B] 
true 
null 

Das sagt mir, dass die Karte offenbar eine HashMap, aber die getClass Methode will mir das nicht sagen.

Also meine Frage ist: Warum gibt getClass Null zurück, und gibt es eine geeignetere Möglichkeit, Laufzeitklasse-Informationen von Groovy zu bekommen?

Antwort

6

Sie

map.getClass() 

verwenden, da sonst ist es für einen Schlüssel suchen class

Fast ein Duplikat Why does groovy .class return a different value than .getClass()

+0

Bah genannt, habe ich vergessen, Groovy könnte auch, dass als Mapkey interpretieren. Vielen Dank! – Kirie

+2

#GroovyPuzzlers, S01. – JBaruch

+1

Ich frage mich manchmal, warum die Gemeinschaft nicht zusammenkommt und Skriptsprachen meidet. Dies ist das 30. "Problem", das ich hatte, seit ich angefangen habe, Groovy zu lernen, was ich mehr oder weniger tun muss, wenn ich mich mit Gradle auf den neuesten Stand bringen möchte. Jeder behauptet, dass Skriptsprachen die Produktivität verbessern. Ist das ein Spott der Realität? Während sich JavaScript stark typisiert und objektorientiert entwickelt, gehen JVM-basierte Sprachen in die entgegengesetzte Richtung. Geschichte wiederholt sich. –