3

CheckStyleを使用してスタイル標準を適用しています。含めることを選択したスタイル ルールの 1 つは、NeedBracesモジュールでした。

NeedBracesは、すべてのブロック型ステートメント (ifelsefor) に左中括弧と右中括弧が必要であることを指定します。ただし、私が知る限り、完全に正しく機能しているわけではありません。

この例では、CheckStyle エラーが発生します。

    if (true)
    {
        System.out.println("20");   
    }
    else
        System.out.println("30");

else ケースには中括弧がないためです。ただし、次の例では CheckStyle エラーをトリガーできません。

    if (true)
    {
        System.out.println("20");   
    }
    else
        if (true)
        {
            System.out.println("30");
        }

これは、else の場合に中かっこがないために失敗するはずでしたが、checkstyle はそれを通過させます。ドキュメントを再確認した後、これが正しく機能しない理由が見つかりません。

それで... CheckStyleモジュール「NeedBraces」はネストされたif/elseブロックで動作しますか? 何か案は?


この質問に対する答えは、別の質問です。上記の望ましくないコードに違反としてフラグを立てる規則はありますか?

4

2 に答える 2

6

奇妙にフォーマットされていますが、あなたが持っているのは「else if」であるため、例外を作っていると思います。この場合、「... else { if { ... } } になってしまうため、「if」を中括弧で囲む必要はありません。

コードは次のようにフォーマットする必要があります。

if (true)
{
    System.out.println("20");   
}
else if (true)
{
    System.out.println("30");
}
于 2008-12-20T00:54:46.590 に答える
1

最初の例では、 elseブロックの下に別のステートメントを追加しようとすると、中かっこを配置する必要があります。一方、2 番目の例では、中括弧内にステートメントを追加します。エラーが発生しやすいため、CheckStyleが前者でエラーを表示している理由だと思います。else not outsideの一部として本当に必要な場合は、中かっこを付けずにステートメントを追加することになる可能性があります。

于 2008-12-20T02:35:15.530 に答える