2011-06-15 46 views
1

我工作的Grails應用ATM。我需要添加展開抽象的Java類的所有實例

Trigger.metaClass.id = { delegate.hashCode() } 

之前我調用類的作品抽象java類(org.quartz.Trigger)的屬性。我想爲我的應用程序中的所有觸發器啓用此功能。這可能嗎?或者我每次需要該房產時都必須重複此操作?

回答

2

如果任何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() 
+0

由於添。通過將其添加到我的Grails中的BootStrap.groovy環境動態生成的方法和屬性可在我的整個應用程序中訪問。 – onigunn 2011-06-15 09:45:15