给出以下代码和替代方案,从可维护性和效率的角度来看会更好。我有现有的代码和2个替代品。经过大量的互联网淘汰,我还没有找到任何真正的答案。
现有的伪java:
Object obj = new ValidObject();
if (TextUtils.equals(obj.method(), CONSTANTS.option1){
} else if (TextUtils.equals(obj.method(), CONSTANTS.option2){
} else if (TextUtils.equals(obj.method(), CONSTANTS.option3){
} else if (TextUtils.equals(obj.method(), CONSTANTS.option4){
} else if (TextUtils.equals(compareString , CONSTANTS.option5) || TextUtils.equals(compareString , CONSTANTS.option6) ){
}
备选方案1(用局部变量替换重复的obj.method()):
这里的前提是重复函数调用会浪费CPU,但代价是存储String
Object obj = new ValidObject();
String compareString = obj.method();
if (TextUtils.equals(compareString , CONSTANTS.option1){
} else if (TextUtils.equals(compareString , CONSTANTS.option2){
} else if (TextUtils.equals(compareString , CONSTANTS.option3){
} else if (TextUtils.equals(compareString , CONSTANTS.option4){
} else if (TextUtils.equals(compareString , CONSTANTS.option5) || TextUtils.equals(compareString , CONSTANTS.option6) ){
}
备选方案2(如果使用开关替换,则丢失TextUtils.equals):
主要是为了可读性,但查找切换显然比
switch(obj.method()){
case CONSTANTS.option1:break;
case CONSTANTS.option2:break;
case CONSTANTS.option3:break;
case CONSTANTS.option4:break;
case CONSTANTS.option5:
case CONSTANTS.option6:break;
}
这些最好的选择是什么,还有另一个我没想过的吗?
PS:
显然,我省略了代码,因为任何其他代码都不相关。我的代码中没有带有5个空体的if语句..