1
我工作的Grails應用ATM。我需要添加展開抽象的Java類的所有實例
Trigger.metaClass.id = { delegate.hashCode() }
之前我調用類的作品抽象java類(org.quartz.Trigger
)的屬性。我想爲我的應用程序中的所有觸發器啓用此功能。這可能嗎?或者我每次需要該房產時都必須重複此操作?
我工作的Grails應用ATM。我需要添加展開抽象的Java類的所有實例
Trigger.metaClass.id = { delegate.hashCode() }
之前我調用類的作品抽象java類(org.quartz.Trigger
)的屬性。我想爲我的應用程序中的所有觸發器啓用此功能。這可能嗎?或者我每次需要該房產時都必須重複此操作?
如果任何Trigger
對象初始化之前添加到metaClass
,那麼這將增加在所有這些存在。
然而,在創建之後,你需要將它添加到Trigger
每個實例。
當然,這種方法只能在Groovy可見的,因爲Java不知道的metaClass
。
一些示例Groovy代碼表示這個動作:
// Add to the metaClass of an anstract java class
AbstractList.metaClass.woo = { 'hi there' }
// Create an instance of a class that extends this abstract class
ArrayList list = [ 1, 2, 3 ]
// Call the closure in the metaClass
println list.woo()
由於添。通過將其添加到我的Grails中的BootStrap.groovy環境動態生成的方法和屬性可在我的整個應用程序中訪問。 – onigunn 2011-06-15 09:45:15