2015-11-23 13 views
5

W Groovy często używam kodu map literal notation w moim kodzie i byłem ciekawy co to jest konkretna implementacja Map.Groovy: metoda getClass na powrocie z literalnej liczby znaków null

Po wypróbowaniu kilku rzeczy, ten skrypt najlepiej ilustruje moje zamieszanie:

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 

i otrzymać ten wynik:

[A:B] 
true 
null 

to mówi mi, że mapa jest najwyraźniej HashMap, ale getClass metoda nie chce mi tego powiedzieć.

Moje pytanie brzmi: dlaczego getClass zwraca wartość null, i czy istnieje lepszy sposób uzyskania informacji o klasie środowiska wykonawczego z Groovy?

Odpowiedz

6

Trzeba użyć

map.getClass() 

W przeciwnym razie szuka klucza o nazwie class

Prawie duplikat Why does groovy .class return a different value than .getClass()

+0

Bah, zapomniałem Groovy może również interpretować że jako klucz mapy. Dzięki! – Kirie

+2

#GroovyPuzzlers, S01. – JBaruch

+1

Czasami zastanawiam się, dlaczego społeczność nie spotyka się i unika języków skryptowych. To jest 30. "problem", który miałem, odkąd zacząłem uczyć się Groovy, które mniej więcej muszę, jeśli chcę przyspieszyć z Gradle. Wszyscy twierdzą, że języki skryptowe poprawiają produktywność. Czy to kpina z rzeczywistości? Podczas gdy JavaScript zmierza w kierunku silnego typowania i zorientowania obiektowego, języki oparte na JVM idą w przeciwnym kierunku. Historia się powtarza. –

Powiązane problemy