标记不读/写实例状态的方法

时间:2016-07-30 09:09:07

标签: java defensive-programming

我已经看到,有时类中不依赖于实例状态的方法被标记为static。我发现它很清楚,因为它宣称“这种方法独立于实例状态'”。在审查不一致状态的可能性时,很容易跳过该方法。

但是,将方法标记为静态的问题是静态方法不能被继承或覆盖。

这里讨论的内容如下:Does it make sense to have a non static method which does not use an instance variable?

有一个注释来声明非静态方法是否与状态无关是否有意义?然后编译器可以验证它仅使用其他与状态无关的方法。

管道中是否有这样的功能?

1 个答案:

答案 0 :(得分:1)

java中没有这样的机制。即使static也未涵盖所有情况。静态方法仍然可以在静态上下文中更改状态。

class Example {
    static int counter = 0;
    static int add(int a, int b) {
         counter++;
         return a + b;
    }
}

但是有一些研究使用静态分析来解决这个问题。看起来JPure有一个工作原型