У меня есть такой способ:

void schedule(){
switch (schedule.getType()) {
                case MANUAL:
                    scheduleManual();
                    break;
                case AUTO:
                    scheduleAuto();
                    break;
                case NONE:
                    scheduleNone();
                    break;
                default:
                    break;
            }
}

И я хотел бы знать, есть ли лучший дизайн, чтобы иметь это вместо переключателя.

0
Ricardo Fernandes 13 Ноя 2020 в 17:38

2 ответа

Лучший ответ
void schedule(){
    def method = 'schedule' + schedule.getType().toString().toLowerCase().capitalize()
    this."$method"()
}
2
daggett 13 Ноя 2020 в 21:15

Вы также можете использовать магию methodMissing():

enum Type {MANUAL, AUTO, NONE}

schedule = Type.AUTO

def methodMissing(String name, args){
  if( name in Type.values()*.toString() )
    this."schedule${name.toLowerCase().capitalize()}"()
}

void schedule(){
  this."$schedule"()
}

void scheduleManual(){ println "calling scheduleManual" }
void scheduleAuto(){ println "calling scheduleAuto" }

schedule()
1
injecteer 14 Ноя 2020 в 11:37