2012-06-13 1 views
1

я создал класс: NumberHelperКак Алиас методы в Groovy класс Категория

имеет метод: roll(num)

, и я хочу, чтобы псевдоним его, например, rollOnce, так что я писал:

static def rollOnce = NumberHelper.&roll 

И программа выдает исключение, когда я звоню rollOnce. Как это сделать в хорошем состоянии?

Более подробно:

Во-первых, мы реализуем класс Номер для нашего собственного бизнеса, в Java

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 

таковы информация достаточно, чтобы помочь мне найти причину?

И спасибо за ответ, спасибо :)

+4

Можете ли вы добавить трассировку стека исключений. И исходный код тоже будет полезен. – aldrin

+0

Где/как вы определяете 'rollOnce'? Если 'roll' является статическим, и вы удаляете ключевое слово' static' для 'rollOnce', оно отлично работает - нам нужно больше контекста. –

ответ

0

То, что вы должны работать до тех пор, как оригинальный метод рулонной также статический. Это отлично работает для меня в groovy. 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 
+0

Я думаю, что они работают с Groovy Категория: -/ –

+0

Ах, пропустил это в названии, да, нам нужно увидеть код, чтобы узнать, что делает OP. –