以下に示すように、switchステートメントがいくつかあります。休憩がないことに注意してください。 Findbugsは、2番目のcaseステートメントでのみエラーを報告しています。エラーは次のとおりです。1つのケースが次のケースにフォールスルーする場所でSwitchステートメントが見つかりました。
switch(x) {
case 0:
// code
case 1:
// code
case 2:
// code
}
これらをコメントとして書いたが、それは見えない。私はそれらを答えに変えています。これは、実際には T.J。Crowderの答え の拡張です。
Findbugsがエラーを報告する関連ルールを見つけることができます here 。
filter.xml
などのコンテンツを含むxmlファイルを作成し、-exclude filter.xml
オプションを指定してツールを実行することで、Findbugsがこの種のエラーを報告しないようにすることができます。 Findbugsのフィルター を参照してください。
<FindBugsFilter>
<Match>
<Bug category="PERFORMANCE" />
</Match>
</FindBugsFilter>
スイッチのフォールスルーは、「危険なコード」のFindbugsカテゴリに分類されます。私は、エラーメッセージの数を削減するために、switchステートメントで最初にフォールスルーが発生したことを示すだけだと思います。
休憩なしでは、それらは互いに落ちますが、x == 0
すべてのcaseステートメントブロックのすべてのコードを調べます。 Findbugsはエラーについて間違っているか、ブレークなしのエラー状態、つまりcase 0
はcase 1
破壊する。
正確なコードとエラーがなければ、私はそれ以上の手助けはできません。休憩の欠如は意図的ですか?
通常、バグ分析ツールはコードのフォールスルーを好みません。ほとんどの場合、ユーザーはブレークを書くのを忘れたからです。
FindBugsで警告を具体的に無効にする方法があるかどうかはわかりませんが、Checkstyleツールは、/ * fallthrough * /などの特別なコメントを認識し、ユーザーが本当に次のコードの実行を望んでいると仮定します。この種のコメントを入力すると、読みやすくなります。 http://checkstyle.sourceforge.net/config_coding.html#FallThrough
Javaコードの規則では、フォールスルーコメントの使用にも言及しています。 http://www.Oracle.com/technetwork/Java/javase/documentation/codeconventions-142311.html
ケースにブレークがない場合、トリガースイッチがケースのブレークまたは終了を検出するまで、すべてのケースを通過します。デフォルトのケースがある場合、この場合のスイッチ値fooが他のケースと一致しない場合にトリガーされます。