Groovy 中的重构开关

Refactor Switch in Groovy

我有这个方法:

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

而且我想知道是否有更好的设计来代替开关。

void schedule(){
    def method = 'schedule' + schedule.getType().toString().toLowerCase().capitalize()
    this."$method"()
}

你也可以使用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()