web-dev-qa-db-ja.com

切れ目なく切り替え

以下に示すように、switchステートメントがいくつかあります。休憩がないことに注意してください。 Findbugsは、2番目のcaseステートメントでのみエラーを報告しています。エラーは次のとおりです。1つのケースが次のケースにフォールスルーする場所でSwitchステートメントが見つかりました。

switch(x) {

    case 0:
        // code

    case 1:
        // code

    case 2:
        // code
}
23
fastcodejava

これらをコメントとして書いたが、それは見えない。私はそれらを答えに変えています。これは、実際には T.J。Crowderの答え の拡張です。

Findbugsがエラーを報告する関連ルールを見つけることができます here

filter.xmlなどのコンテンツを含むxmlファイルを作成し、-exclude filter.xmlオプションを指定してツールを実行することで、Findbugsがこの種のエラーを報告しないようにすることができます。 Findbugsのフィルター を参照してください。

<FindBugsFilter>
  <Match>
    <Bug category="PERFORMANCE" />
  </Match>
</FindBugsFilter>
4
melihcelik

スイッチのフォールスルーは、「危険なコード」のFindbugsカテゴリに分類されます。私は、エラーメッセージの数を削減するために、switchステートメントで最初にフォールスルーが発生したことを示すだけだと思います。

3
Ted Hopp

休憩なしでは、それらは互いに落ちますが、x == 0すべてのcaseステートメントブロックのすべてのコードを調べます。 Findbugsはエラーについて間違っているか、ブレークなしのエラー状態、つまりcase 0case 1破壊する。

正確なコードとエラーがなければ、私はそれ以上の手助けはできません。休憩の欠如は意図的ですか?

2
Matt Fellows

通常、バグ分析ツールはコードのフォールスルーを好みません。ほとんどの場合、ユーザーはブレークを書くのを忘れたからです。

FindBugsで警告を具体的に無効にする方法があるかどうかはわかりませんが、Checkstyleツールは、/ * fallthrough * /などの特別なコメントを認識し、ユーザーが本当に次のコードの実行を望んでいると仮定します。この種のコメントを入力すると、読みやすくなります。 http://checkstyle.sourceforge.net/config_coding.html#FallThrough

Javaコードの規則では、フォールスルーコメントの使用にも言及しています。 http://www.Oracle.com/technetwork/Java/javase/documentation/codeconventions-142311.html

2
L2M

ケースにブレークがない場合、トリガースイッチがケースのブレークまたは終了を検出するまで、すべてのケースを通過します。デフォルトのケースがある場合、この場合のスイッチ値fooが他のケースと一致しない場合にトリガーされます。

0
Nisal Edu