Java Checkstyle规则:非静态变量访问静态变量。

5

是否有一个Checkstyle规则限制非静态变量和方法的访问?

这应该会引发一个警告:

instance.staticField = value;

Eclipse有相应的设置,但我想在构建过程中强制执行此设置。

这取决于你的构建工具是什么? - Vijay Shanker Dubey
3
你的意思是,在使用类似于 instance.staticField = ... 这样的语句时,想要触发编译错误? - alain.janinm
1
是的,这正是我想做的。 - Jeff Storey
4个回答

3
我猜你需要使用 javac -Xlint:static -Werror toto.java
参见文档
  • -Xlint:name :启用警告名称。有关可使用此选项启用的警告列表,请参见带有-Xlint选项的可以启用或禁用的警告 部分。

  • -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: warning: [static] static variable should be qualified by type name,

StaticTest, instead of by an expression

   st.toto="dfd";

     ^

error: warnings found and -Werror specified 1 error 1 warning


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

1
正如其名称所示,Checkstyle仅检查您的代码格式。如果您正在寻找错误模式,则应查看Findbugs:

http://findbugs.sourceforge.net


不幸的是,我在findbugs中也没有看到这个...我也检查过那里。 - Jeff Storey

1

您可以使用 FirebugPMD 来实现此目的。两个主要的构建工具 MavenAnt 都有命令来为您完成此操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接