召集組的方法對象上我有一個類叫做Test
和我下面的代碼使用閉
def test = new Test()
test.method1(args)
test.method2(args)
等。我希望這樣的事情可以完成,我可以在閉包中通過test
對象的所有方法調用,並使其工作。像
test {
method1(args)
method2(args)
}
在groovy中可以這麼做嗎?
召集組的方法對象上我有一個類叫做Test
和我下面的代碼使用閉
def test = new Test()
test.method1(args)
test.method2(args)
等。我希望這樣的事情可以完成,我可以在閉包中通過test
對象的所有方法調用,並使其工作。像
test {
method1(args)
method2(args)
}
在groovy中可以這麼做嗎?
是的,這是可能的with
Groovy:在
test.with {
method1 args
method2 args
}
的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文件獲取方法的名稱和值是有用的或一些類似的外部來源。