我有一个很大的Ifs列表,我想把它改成一个switch语句。目前它看起来像这样:
if(x == 1){
...
}
if(x == 2){
...
}
if(myArray.contains(x)){
...
}
实际上它比这要长一点,但是如果在示例中让我感到困惑的是第三个 - 如何改变它以使其在交换机中工作,或者甚至可能?
答案 0 :(得分:17)
您可以根据代码中可能的退出条件执行此类操作,但是YMMV:
switch (x) {
case 1:
...
break;
case 2:
...
break;
case 3:
case 4:
... multi-case
break;
default:
if(myArray.contains(x)){
...
}
}
答案 1 :(得分:3)
Switch语句只能用于测试x
的相等性因此,如果not equality conditions
喜欢(if(myArray.contains(x))
)必须在最后,那么你可以将其粘贴到开关的默认部分
看起来会这样
switch (x) {
case 1: ...; break;
case 2: ...; break;
default: if(myArray.contains(x)) ...
}
如果not equality conditions
需要在中间,则无法使用开关。
参考:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html
答案 2 :(得分:1)
您只能切换x值。这意味着最后一个条件不会成为交换机的一部分:
switch(x) {
case 1:
...
break;
case 2:
...
break;
}
if(myArray.contains(x)){
...
}
答案 3 :(得分:1)
是的,有可能。 switch语句将使它更清洁,更易于维护。你必须担心x
,因为它必须是编译时常量。
switch(x) {
case 1:
doSomething();
break();
case 2:
doSomethingElse();
break();
default:
if(myArray.contains(x)){
}
//etc...
}
答案 4 :(得分:0)
这看起来不太面向对象。
尝试使用“使用多态替换条件”来重构代码 http://martinfowler.com/refactoring/catalog/replaceConditionalWithPolymorphism.html
如果需要从int转换为自定义对象,地图可以帮助您进行一些查找。