我有一个名为Test
的课程,我有以下代码
def test = new Test()
test.method1(args)
test.method2(args)
等等。我希望可以做到这样的事情,我可以在闭包中传递test
对象的所有方法调用并使它们工作。像
test {
method1(args)
method2(args)
}
是否可以在groovy中这样做?
答案 0 :(得分:5)
是的,有可能with
Groovy:
test.with {
method1 args
method2 args
}
答案 1 :(得分:0)
Groovy会让你call a method using a GString代替标识符,所以如果你想拥有一个你在对象上调用的方法名称集合,你可以这样做:
def doTest(final object, final methods, final args) {
methods.each { object."$it"(*args) }
}
final test = new Object() {
void method1(final... args) { println "method1 $args" }
void method2(final... args) { println "method2 $args" }
void method3(final... args) { println "method3 $args" }
}
doTest test, [ 'method1', 'method2' ], [ 1, 2, 3 ]
Groovy也有passing maps to a function的一些语法糖,这可能很方便。如果您实际上不想使用相同的参数调用每个方法,则可以执行以下操作:
def doTest(final Map methods, final object) {
methods.each { object."$it.key"(*it.value) }
}
doTest test, method1: [ 1, 2, 3 ], method2: [ 4, 5, 6 ]
如果您从CSV文件或类似的外部来源获取方法名称和值,我可以看到这样的内容很有用。