2013-04-17 26 views
7

Tại sao bản đồ đen của Groovy không có một metaClass?Tại sao bản đồ của Groovy không có metaClass?

// lists work as expected: 
aList = [] 
println aList.class // class java.util.ArrayList 
println aList.metaClass // gives the full blown metaclass 
      //  [email protected] 
      //  [[email protected][class java.util.ArrayList]] 

// string and numbers too: 
println ''.metaClass 
println 12.metaClass 

// map does not: 
aMap = [:] 
println myMap.metaClass // gives null 
println myMap.class // also gives null 

Thử nghiệm với:

Groovy Version: 1.8.6 JVM: 1.6.0_31 Vendor: Sun Microsystems Inc. OS: Linux 

Trả lời

16

Bạn phải sử dụng:

[:].getMetaClass() 

Giống như nếu bạn muốn nhận được class của một Map, ví dụ:

[:].getClass() 

đây là beca sử dụng Bản đồ trả lại giá trị được biểu thị bằng khóa đã cho khi bạn thực hiện tra cứu thuộc tính trên chúng. Nếu không, bạn không thể có khóa class hoặc metaClass

+0

oh, bạn đã đúng! tại sao tôi không nghĩ về điều đó trước đây? :) – elias

+0

Trên một chủ đề liên quan, có cách nào để sử dụng missingProperty cho một lớp thực hiện bản đồ không? Ok, tôi sẽ đăng một câu hỏi khác ... – Philippe

+0

Xem http://stackoverflow.com/questions/29042449/how-to-use-propertymissing-on-a-class-that-implements-java-util-map-in -groovy – Philippe