替代Java中的嵌套切换语句

所以今天我编写了一个方法,结合了嵌套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语句的合适替代品?

我建议您通过调用过程替换每个嵌套的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; } } 
  1. 因为使用很多开关变得非常难以阅读。
  2. 每当出现新案例时,我们就必须修改代码并添加CASE

在这种情况下我们可以考虑使用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"; } } 

现在我们有没有switch case的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 } } 

即使我们必须添加更多案例,我们也只需添加实现,此处不做任何更改

查看完整的代码,看看是否可以这样做

如果你有整数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 // }