如何在Groovy中重写方法Class <! - ? - > .getAt

时间:2012-11-30 10:45:45

标签: groovy metaprogramming

目前我正在使用Groovy 1.8.2,以下代码按预期方式为我工作:

Class.metaClass.getAt = { args ->
    println "Called ${delegate}[${args}]"
    TypeDefinition.create(delegate, args)
}

我在我的DSL中使用它,如下所示:

TypeDefinition instance = List[MyOwnClass]

当我转到Groovy 2.0.5时,这个功能失败了“Missing method:static java.util.List.getAt()with parameter some.package.MyOwnClass”。所以问题是如何使它与Groovy 2一起使用?

1 个答案:

答案 0 :(得分:0)

使用类别适用于2.0.5:

class ClassHelperCategory {
    static getAt(Class cls, String arg) {
        "Called $cls[$arg]"
    }
}

Class.metaClass.mixin(ClassHelperCategory)

assert List['hello'] == 'Called interface java.util.List[hello]'