将Closure方法添加到groovy类的metaClass中

时间:2013-11-04 13:04:54

标签: groovy closures metaclass

我知道如何将方法添加到java.util.List的metaClass:

java.util.List.metaClass.average={

       return delegate.sum()/delegate.size();
}

如果我有def myList=[new Person(score:1),new Person(score:2)],我会按以下方式调用新方法:

 myList.average(); 

但是,我想将其称为:

   myList.average{it.score}

如何将此方法添加到metaClass以调用Closure({}而不是()

1 个答案:

答案 0 :(得分:1)

你应该可以这样做:

List.metaClass.average = { Closure c ->
    delegate.sum( c ) / delegate.size()
}