我正在學習groovy,並且我有一個關於它的元編程設施的問題。據我所知,groovy中的每個對象實現了groovy.lang.GroovyObject接口(由groovy編譯器隱式添加)。後者接口包含的方法getMetaClass(),所以我可以做到以下幾點:groovy中的java類的metaClass屬性
class MyGroovyClass{
}
def myGroovyClass = new MyGroovyClass();
println myGroovyClass.metaClass.name
,我不明白的是由Java編譯器像java.lang.String中編譯對象,如何獲取元類屬性的東西。這個屬性是否在通過MetaClassRegistry與Java類相關的實際MetaClass對象中定義?
好的,但是如何在groovy.runtime.DefaultGroovyMethods中定義的這些方法被調用? groovy編譯器是否顯式查找對jdk類的方法調用並攔截這些以生成調用DefaultGroovyMethods中定義的方法的字節碼?這是否意味着只有在jdk中定義的java類才能獲得getMetaClass()方法? – 2012-01-14 00:25:08
@ JamesV.H。那麼,Groovy對象顯然擁有這個屬性 - 「獲得方法」是什麼意思? – 2012-01-14 00:34:05
@DaveNewton是的我明白在groovy中編譯的對象具有屬性,在那裏沒有問題。用java編譯器編譯的類顯然沒有屬性,我們仍然可以調用它們的metaClass屬性。 Ataylor評論了添加方法的定義(在DefaultGroovyMehods中),而不是關聯機制如何工作。 – 2012-01-14 01:25:17