【问题标题】:java checkstyle rule for non-static variable access to static variables非静态变量访问静态变量的java checkstyle规则
【发布时间】:2012-06-20 14:32:29
【问题描述】:

是否有可用的 Checkstyle 规则来限制对静态变量和方法的非静态访问?

这应该会引发警告:

instance.staticField = value;

Eclipse 对此有一个设置,但我想在构建中强制执行它。

【问题讨论】:

  • 嗯,这取决于你的构建工具?
  • 你的意思是你想在使用instance.staticField = ...之类的东西时引发编译错误?
  • 是的,这就是我想做的事情

标签: java checkstyle static-variables


【解决方案1】:

我猜想使用 javac -Xlint:static -Werror toto.java 是你要找的。​​p>

来自documentation

  • -Xlint:name:启用警告名称。有关可以使用此选项启用的警告列表,请参阅带有 -Xlint 选项的 Warnings That Can Be Enabled or Disabled 部分。

  • -Werror : 如果出现警告则终止编译。

我试过这个例子:

public class StaticTest {
    public static String toto = "toto";

    public static void main(String s[]) {
        StaticTest st = new StaticTest();
        st.toto="dfd";
    }
}

输出是:

StaticTest.java:16: 警告:[静态] 静态变量应由类型名称限定,

StaticTest,而不是通过表达式

   st.toto="dfd";

     ^

错误:发现警告并指定 -Werror 1 个错误 1 个警告

【讨论】:

    【解决方案2】:

    顾名思义,Checkstyle 只检查代码的形式。如果你搜索错误模式,你应该看看 Findbugs:

    http://findbugs.sourceforge.net

    【讨论】:

    • 不幸的是,我也没有在 findbugs 中看到这个...我也在那里检查过。
    【解决方案3】:

    您可以为此使用 FirebugPMD。两个主要的构建工具 MavenAnt 确实具有为您执行此操作的命令。

    【讨论】:

      【解决方案4】:

      不,Checkstyle 对所有检查都有限制/范围 - 它只检查一个文件的结构,无法获取其他类/文件的结构。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-17
        相关资源
        最近更新 更多