我们可以在 Java 中的同一 switch 语句中的另一个 case 中调用 "case" 吗?
Can we call a "case" inside another case in the same switch statement in Java?
我的意图是在同一个 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 case 中的代码片段。但是,您可以将代码提取到一个可以从另一个案例中调用的自己的方法中:
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;
}
}
虽然您不能直接影响 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 3:
statement 3;
case 2:
statement 2;
case 1:
statement 1;
break;
default:
break;`
}
如已接受的答案中所述,使用方法是最好的方法,但由于某些原因,如果您无法创建方法,这是另一种不使用方法的方法
boolean isBreakTheLoop = false, isCase2Required = false;
while(!isBreakTheLoop){
switch (orderType) {
case 1:
statement 1;
if(isCase2Required){
orderType = 2;
break;
}
isBreakTheLoop = true;
break;
case 2:
statement 2;
isBreakTheLoop = true;
break;
case 3:
orderType = 1;
isCase2Required = true;
break;
default:
isBreakTheLoop = true;
break;
}
}
我的意图是在同一个 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 case 中的代码片段。但是,您可以将代码提取到一个可以从另一个案例中调用的自己的方法中:
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;
}
}
虽然您不能直接影响 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 3:
statement 3;
case 2:
statement 2;
case 1:
statement 1;
break;
default:
break;`
}
如已接受的答案中所述,使用方法是最好的方法,但由于某些原因,如果您无法创建方法,这是另一种不使用方法的方法
boolean isBreakTheLoop = false, isCase2Required = false;
while(!isBreakTheLoop){
switch (orderType) {
case 1:
statement 1;
if(isCase2Required){
orderType = 2;
break;
}
isBreakTheLoop = true;
break;
case 2:
statement 2;
isBreakTheLoop = true;
break;
case 3:
orderType = 1;
isCase2Required = true;
break;
default:
isBreakTheLoop = true;
break;
}
}