gpt4 book ai didi

java - 不间断切换

转载 作者:IT老高 更新时间:2023-10-28 20:30:25 25 4
gpt4 key购买 nike

我有一些 switch 语句,如下所示。注意没有休息。Findbugs 仅在第二个 case 语句上报告错误。错误是:在一个案例落入下一个案例的地方找到了 Switch 语句。

switch(x) {

case 0:
// code

case 1:
// code

case 2:
// code
}

最佳答案

Findbugs 指出,如果第一个 case 中有任何代码,则从一个 case 跌到下一个通常不是一个好主意(尽管有时可以使用它来产生良好的效果)。所以当它看到第二个 case 并且没有 break 时,它会报告错误。

例如:

switch (foo) {
case 0:
doSomething();
case 1:
doSomethingElse();
default:
doSomeOtherThing();
}

这是完全有效的 Java,但它可能没有达到作者的意图:如果 foo0所有三个 doSomethingdoSomethingElsedoSomeOtherThing 函数运行(按此顺序)。如果 foo1,则只有 doSomethingElsedoSomeOtherThing 运行。如果 foo 是任何其他值,则只有 doSomeOtherThing 运行。

相比之下:

switch (foo) {
case 0:
doSomething();
break;
case 1:
doSomethingElse();
break;
default:
doSomeOtherThing();
break;
}

这里只有一个函数会运行,具体取决于foo的值。

由于忘记 break 是一种常见的编码错误,Findbugs 等工具会为您标记出来。

有一个常见的用例,你有多个 case 语句在一行中 no 介入代码:

switch (foo) {
case 0:
case 1:
doSomething();
break;
case 2:
doSomethingElse();
break;
default:
doSomeOtherThing();
break;
}

如果 foo0 or 1,我们想调用 doSomething >。大多数工具不会将此标记为可能的编码错误,因为在 case 1 之前的 case 0 中没有代码,这是一种相当常见的模式。

关于java - 不间断切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8563970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com