3

我们正在使用CheckStyle来执行我们的样式标准。我们选择包含的样式规则之一是NeedBraces模块。

NeedBraces指定每个块类型语句(例如if,else,for)必须有左花括号和右花括号。但是,据我所知,它并不能完全正常工作。

此示例将触发 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”。在这种情况下,它不应该强迫你在 "if" 周围加上大括号,因为你最终会得到 "... else { if { ... } }

您的代码应格式化:

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

在您的第一个示例中,如果您尝试在else块下添加另一个语句,那么您将需要放置大括号。另一方面,在第二个示例中,您将在大括号内添加语句。我相信这就是 CheckStyle 在前者中显示错误的原因,因为它容易出错。当您确实希望将其作为else的一部分而不是在外面时,您可能最终会添加语句而不放置大括号。

于 2008-12-20T02:35:15.530 回答