【问题标题】:Can the CheckStyle module "NeedBraces" work with nested if/else blocks?CheckStyle 模块“NeedBraces”可以与嵌套的 if/else 块一起使用吗?
【发布时间】:2010-09-27 19:30:36
【问题描述】:

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

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

此示例将触发 CheckStyle 错误。

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

因为 else case 没有大括号。但是,下一个示例未能触发 CheckStyle 错误。

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

这应该会失败,因为 else 情况下缺少大括号,但 checkstyle 让它通过。仔细检查文档后,我找不到任何原因导致它无法正常工作。

所以... CheckStyle 模块“NeedBraces”能否与嵌套的 if/else 块一起使用? 有什么想法吗?


这个问题的答案是another question:是否有规则将上述不良代码标记为违规?

【问题讨论】:

    标签: java coding-style checkstyle


    【解决方案1】:

    我相信这是一个例外,因为虽然格式很奇怪,但你所拥有的是“else if”。在这种情况下,它不应该强迫你在 "if" 周围加上大括号,因为你最终会得到 "... else { if { ... } }

    你的代码应该被格式化:

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

    【讨论】:

    • 这正是正在发生的事情。 Eclipse 格式化程序是罪魁祸首(一个简单的修复)。我想知道是否有一个 checkstyle 规则来禁止 if 和 else 之间的换行符。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2021-09-16
      • 1970-01-01
      • 1970-01-01
      • 2014-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多