所以我今天写了一个方法,结合了嵌套switch语句的使用,代码对我来说看起来相当干净简洁,但我被告知嵌套switch语句通常不是最好的方法,因为它们可能会与您添加的更多switch语句混淆。下面是我的代码样例:
EnumOne enumOne;
EnumTwo enumTwo = null;
EnumTwo enumThree = null;
switch (enumOne) {
case CASE_ONE:
switch (enumTwo){
case A: enumTwo = EnumTwo.B; break;
case C: enumTwo = EnumTwo.D; break;
default: break;
}
switch (enumThree) {
case AA: enumThree = EnumTwo.BB; break;
case CC: enumThree = EnumTwo.DD; break;
default: break;
}
break;
case CASE_TWO:
case CASE_THREE:
switch(EnumTwo) {
default: break;
}
switch (enumThree) {
case AA: enumThree = EnumTwo.XX; break;
case CC: enumThree = EnumTwo.YY; break;
default: break;
}
break;
default:
break;
}所以我的问题是,本质上,什么是这些switch语句的合适替代方案?
发布于 2013-04-11 00:18:44
我建议您将每个嵌套的switch语句替换为对过程的调用,然后该过程将执行嵌套的switch代码。
改写这样的代码:
EnumOne enumOne;
EnumTwo enumTwo = null;
EnumTwo enumThree = null;
switch (enumOne)
{
case CASE_ONE:
nested_switch1();
case CASE_TWO:
case CASE_THREE:
nested_switch2();
break;
default:
break;
}
nested_switch1() {
switch (enumTwo)
{
case A:
enumTwo = EnumTwo.B;
break;
case C:
enumTwo = EnumTwo.D;
break;
default:
break;
}
switch (enumThree)
{
case AA:
enumTwo = EnumTwo.BB;
break;
case CC:
enumTwo = EnumTwo.DD;
break;
default:
break;
}
break;
}
nested_switch2() {
switch(EnumTwo)
{
default:
break;
}
switch (enumThree)
{
case AA:
enumTwo = EnumTwo.XX;
break;
case CC:
enumTwo = EnumTwo.YY;
break;
default:
break;
}
}发布于 2013-04-11 00:48:42
在这种情况下,我们可以考虑使用polymorphism
我将给出一个简单的类,只是为了让你们理解。假设前面有一个类,使用switch case
class Test
{
Animal a;
public Test(Animal a)
{
this.a=a;
}
public moveThisAnimal()
{
switch(this.a)
{
case fish:
System.out.println("swim");
break;
case dog:
System.out.println("walk");
break;
case bird:
System.out.println("fly");
break;
}
}
}现在我们用我们的多态逻辑替换这些开关
Interface Animal
{
String move();
}
Class Dog implements Animal
{
public String move()
{
return "walk";
}
}
Class Bird implements Animal
{
public String move()
{
return "fly";
}
}
Class Fish implements Animal
{
public String move()
{
return "swim";
}
}现在我们有了没有切换大小写的Test类
class Test
{
Animal a;
public Test(Animal a)
{
this.a=a;
}
public moveThisAnimal()
{
System.out.println(this.a.move()); // all switch case statements removed
}
}即使我们必须添加更多的情况,我们也只能在这里添加实现,不做任何更改
查看您的完整代码,看看是否可以这样做
发布于 2013-04-11 09:01:44
如果你有整数X和Y,并且你需要同时打开这两个,你可以以某种明确的方式将它们组合在一起,然后打开这个组合。例如,如果y< 10:
switch (x*10+y)
{
case 0: // x == y == 0
case 1: // x ==0, y == 1
///
case 10: // x == 1, y == 0
case 11: // x == y == 1
//
}https://stackoverflow.com/questions/15931089
复制相似问题