不停地切换 [英] Switch without break
问题描述
我有一些 switch 语句,如下所示.注意没有中断.Findbugs 仅在第二个 case 语句中报告错误.错误是 : Switch 语句发现一个案例落入下一个案例.
I have some switch statement as shown below. Notice there is no break. Findbugs is reporting error on the second case statement only. The error is : Switch statement found where one case falls through to the next case.
switch(x) {
case 0:
// code
case 1:
// code
case 2:
// code
}
推荐答案
Findbugs 指出,如果第一个中有任何代码,从一个 case
到下一个失败通常不是一个好主意一个(虽然有时候用起来效果不错).因此,当它看到第二个 case
并且没有 break
时,它会报告错误.
Findbugs is flagging up that falling through from one case
to the next is generally not a good idea if there's any code in the first one (although sometimes it can be used to good effect). So when it sees the second case
and no break
, it reports the error.
例如:
switch (foo) {
case 0:
doSomething();
case 1:
doSomethingElse();
default:
doSomeOtherThing();
}
这是完全有效的 Java,但它可能不符合作者的意图:如果 foo
是 0
,所有三个函数 doSomething
、doSomethingElse
和 doSomeOtherThing
运行(按此顺序).如果foo
是1
,则只有doSomethingElse
和doSomeOtherThing
运行.如果 foo
是任何其他值,则只有 doSomeOtherThing
运行.
This is perfectly valid Java, but it probably doesn't do what the author intended: If foo
is 0
, all three of the functions doSomething
, doSomethingElse
, and doSomeOtherThing
run (in that order). If foo
is 1
, only doSomethingElse
and doSomeOtherThing
run. If foo
is any other value, only doSomeOtherThing
runs.
相反:
switch (foo) {
case 0:
doSomething();
break;
case 1:
doSomethingElse();
break;
default:
doSomeOtherThing();
break;
}
这里只运行一个函数,取决于foo
的值.
Here, only one of the functions will run, depending on the value of foo
.
由于忘记 break
是一种常见的编码错误,Findbugs 等工具会为您标记.
Since it's a common coding error to forget the break
, tools like Findbugs flag it up for you.
有一个常见的用例,您有多个 case
语句在一行中,没有 中间代码:
There's a common use-case where you have multiple case
statements in a row with no intervening code:
switch (foo) {
case 0:
case 1:
doSomething();
break;
case 2:
doSomethingElse();
break;
default:
doSomeOtherThing();
break;
}
在那里,如果 foo
是 0
或 1
,我们想调用 doSomething
>.大多数工具不会将此标记为可能的编码错误,因为在 case 1
之前的 case 0
中没有代码,这是一种相当常见的模式.
There, we want to call doSomething
if foo
is 0
or 1
. Most tools won't flag this up as a possible coding error, because there's no code in the case 0
prior to the case 1
and this is a fairly common pattern.
这篇关于不停地切换的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!