Подтвердить что ты не робот

Groovy метод с дополнительными параметрами

Я хотел бы написать метод обертки для веб-службы, служба принимает 2 обязательных и 3 необязательных параметра.

Чтобы иметь более короткий пример, я хотел бы получить следующий код, работающий

def myMethod(pParm1='1', pParm2='2') {
    println "${pParm1}${pParm2}"
}

myMethod();
myMethod('a')
myMethod(pParm2:'a') // doesn't work as expected
myMethod('b','c')

Вывод:

12
a2
[pParm2:a]2
a2
bc

Я бы хотел получить один параметр и получить 1a в качестве результата. Возможно ли это (самым ленивым способом)?

4b9b3361

Ответ 1

Невозможно сделать то, что стоит... Код

def myMethod(pParm1='1', pParm2='2'){
    println "${pParm1}${pParm2}"
}

В основном делает groovy создавать следующие методы:

Object myMethod( pParm1, pParm2 ) {
    println "$pParm1$pParm2"
}

Object myMethod( pParm1 ) {
    this.myMethod( pParm1, '2' )
}

Object myMethod() {
    this.myMethod( '1', '2' )
}

Одним из альтернатив было бы иметь необязательную карту в качестве первого параметра:

def myMethod( Map map = [:], String mandatory1, String mandatory2 ){
    println "${mandatory1} ${mandatory2} ${map.parm1 ?: '1'} ${map.parm2 ?: '2'}"
}

myMethod( 'a', 'b' )                // prints 'a b 1 2'
myMethod( 'a', 'b', parm1:'value' ) // prints 'a b value 2'
myMethod( 'a', 'b', parm2:'2nd')    // prints 'a b 1 2nd'

Очевидно, документируя это, чтобы другие люди знали, что происходит в магическом map, и что значения по умолчанию оставлены читателю; -)

Ответ 2

Вы можете использовать аргументы со значениями по умолчанию.

def someMethod(def mandatory,def optional=null){}

Если аргумент "необязательный" не существует, он превращается в null.