我们可以在Java中的同一个switch语句中调用另一个案例中的“case”吗?

我的意图是在同一个switch语句中调用另一个case中的两个case,

switch (orderType) { case 1: statement 1; break; case 2: statement 2; break; case 3: **call case 1;** **Call case 2;** break; default: break;` } 

我们可以用Java做到吗?

虽然您无法直接影响switch案例,但您可以从一个案例中调用switch的父方法并传递不同的参数。 例如,

 void foo(int param1, String param2, ...) { switch (param1) { case 0: foo(1, "some string"); break; case 1: //do something break; default: break; } } 

不,您无法跳转到另一个交换机案例中的代码段。 但是,您可以将代码提取到可以从另一个案例调用的自己的方法中:

 switch (orderType) { case 1: someMethod1(); break; case 2: someMethod2(); break; case 3: someMethod1(); someMethod2(); break; default: break; } void someMethod1() { ... } void someMethod2() { ... } 

你不能只是像这样调用另一个case块。 但是,您可以做的是将每个块包装在一个方法中,并重用它们:

 private void doSomething() { // implementation } private void doSomethingElse() { // implementation } private void runSwitch(int order) { switch (orderType) { case 1: doSomething(); break; case 2: doSomethingElse(); break; case 3: doSomething(); doSomethingElse(); break; default: break; } } 

正如其他人所指出的,您可以在一个方法中实现您的开关案例,该方法接受一个参数,该参数对应于所需的开关案例。 这些开关案例可以递归调用相同的方法,具有所需的开关案例。 这是一个完整的示例,它允许您检查一年是否是闰年:

 public class LeapYear { static int year = 2016; public static void main(String[] args) { leapSwitch(1); } public static void leapSwitch(int switchcase) { switch (switchcase) { case 1: { if (year % 4 == 0) { leapSwitch(2); } else { leapSwitch(5); } } break; case 2: { if (year % 100 == 0) { leapSwitch(3); } else { leapSwitch(4); } } break; case 3: { if (year % 400 == 0) { leapSwitch(4); } else { leapSwitch(5); } } break; case 4: { System.out.println(year+ " is a leap year!"); } break; case 5: { System.out.println("Not a leap year..."); } break; } } }