如何在Groovy Category类中对方法进行别名

时间:2012-06-13 10:06:42

标签: groovy dsl

我创建了一个类:NumberHelper

它有方法:roll(num)

我希望别名,例如rollOnce,所以我写道:

static def rollOnce = NumberHelper.&roll

当我拨打rollOnce时,程序会抛出异常。 如何在groovy中做到这一点?

更多细节:

首先,我们在Java中为我们自己的业务实现Number类

    def userBuildScript = findScript(name) as Closure
    use (NumberHelper, StringHelper, UserHelper){
        // first make the user object
        // then
        userBuildScript.call(preBuildUser, businessNumberObject)
    }

我们为Number类编写了一个类别类,它是上面的NumberHelper。

并在构建脚本中:

    user(someRole) { user, number ->
         it.someProperty = number.roll() // here, an exception throw
    }


    groovy.lang.MissingMethodException: No signature of method: xxx.xx.x.user.biz.Number,roll() is applicable for argument types

这些信息足以帮助我找到原因吗?

感谢您的回答,谢谢:)

1 个答案:

答案 0 :(得分:0)

只要原始滚动方法也是静态的,您所拥有的就应该有效。这对于我来说在常规的1.8.6中工作正常:

class NumberHelper {
    static def roll(num) {
        return new Random().nextInt(num) + 1
    }

    static def rollOnce = NumberHelper.&roll
}

def roll = NumberHelper.roll(6)
assert roll <= 6 && roll >= 1

rollOnce = NumberHelper.rollOnce(10)
assert rollOnce <= 10 && rollOnce >= 1