如何定义接受参数化闭包作为参数的Groovy函数?

如何定义接受参数化闭包作为参数的Groovy函数?,groovy,Groovy,我想定义一个函数,它接受另一个函数(闭包)作为参数。 第二个函数应接受1个参数 目前,我只有一个简单的签名: def func1(func2) { func2("string") } 有没有办法明确规定func2应该接受一个参数(或更少)?不是在func1的定义中,而是在运行时闭包的maximumNumberOfParameters,如下所示: def func1( func2 ) { if( func2.maximumNumberOfParameters > 1 ) {

我想定义一个函数,它接受另一个函数(闭包)作为参数。 第二个函数应接受1个参数

目前,我只有一个简单的签名:

def func1(func2) {
   func2("string")
}

有没有办法明确规定
func2
应该接受一个参数(或更少)?

不是在
func1
的定义中,而是在运行时闭包的
maximumNumberOfParameters
,如下所示:

def func1( func2 ) {
  if( func2.maximumNumberOfParameters > 1 ) {
    throw new IllegalArgumentException( 'Expected a closure that could take 1 parameter or less' )
  }
  func2( 'string' )
}
测试成功:

def f2 = { a -> "returned $a" }
assert func1( f2 ) == 'returned string'
和失败:

def f3 = { a, b -> "returned $a" }
try {
  func1( f3 )
  assert true == false // Shouldn't get here
}
catch( e ) {
  assert e.message == 'Expected a closure that could take 1 parameter or less'
}

我更喜欢测试异常method@ArturoHerrero很好的一点。。。但我必须将我的小示例封装在一个扩展GroovyTestCase的类中:-(