2015-11-23 12 views
5

Trong Groovy tôi sử dụng map literal notation khá thường xuyên trong mã của tôi, và tò mò về việc triển khai thực hiện cụ thể của Map.Groovy: phương thức getClass trên bản đồ trả về chữ cái trống

Sau khi thử một vài điều, kịch bản này tốt nhất minh họa sự nhầm lẫn của tôi:

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 

và nhận kết quả này:

[A:B] 
true 
null 

này nói với tôi rằng bản đồ rõ ràng là một HashMap, nhưng getClass phương pháp không muốn nói với tôi điều đó.

Vì vậy, câu hỏi của tôi là: tại sao getClass trả về giá trị rỗng và có cách nào thích hợp hơn để lấy thông tin lớp thời gian chạy từ Groovy không?

Trả lời

6

Bạn cần phải sử dụng

map.getClass() 

Như nếu không nó đang tìm kiếm một phím gọi class

Gần một bản sao của Why does groovy .class return a different value than .getClass()

+0

Bah, tôi quên Groovy cũng có thể giải thích rằng như một chìa khóa bản đồ. Cảm ơn! – Kirie

+2

#GroovyPuzzlers, S01. – JBaruch

+1

Đôi khi tôi tự hỏi tại sao cộng đồng không đến với nhau và tránh các ngôn ngữ kịch bản. Đây là "vấn đề" thứ 30 mà tôi đã có kể từ khi tôi bắt đầu học Groovy, điều mà tôi ít nhiều phải làm nếu tôi muốn có được tốc độ với Gradle. Mọi người đều tuyên bố rằng các ngôn ngữ kịch bản cải thiện năng suất. Đó có phải là một sự nhạo báng của thực tế? Trong khi JavaScript di chuyển theo hướng được đánh máy mạnh mẽ và hướng đối tượng, các ngôn ngữ dựa trên JVM đi theo hướng ngược lại. Lịch sử lặp lại. –

Các vấn đề liên quan