展开所有实例的抽象Java类

时间:2011-06-15 08:52:13

标签: java grails groovy metaprogramming

我正在处理grails应用程序。我需要一个抽象的java类(org.quartz.Trigger)添加

的属性
Trigger.metaClass.id = { delegate.hashCode() }

在我打电话给班级之前。我想在我的应用程序中为所有触发器启用此功能。这可能吗?或者我每次需要房产时都要重复这个?

1 个答案:

答案 0 :(得分:2)

如果在实例化任何metaClass个对象之前添加到Trigger,那么所有这些对象都将存在。

但是,在创建它们之后,您需要将其添加到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()