【问题标题】:Expand Abstract Java Class for all instances为所有实例展开抽象 Java 类
【发布时间】:2011-06-15 08:52:13
【问题描述】:

我正在开发一个 grails 应用程序 atm。我需要一个抽象 java 类 (org.quartz.Trigger) 的属性添加

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

在我给班级打电话之前。我想为我的应用程序中的所有触发器启用此功能。这可能吗?还是每次我需要该属性时都必须重复此操作?

【问题讨论】:

    标签: java grails groovy metaprogramming


    【解决方案1】:

    如果您在实例化任何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 中,动态生成的方法和属性可以在我的整个应用程序中访问。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-18
    • 2015-07-11
    • 1970-01-01
    • 2014-02-16
    • 1970-01-01
    • 2014-06-24
    相关资源
    最近更新 更多