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()
我有这个方法:
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()