不read/write实例状态的标记方法
Marking methods which do not read/write instance state
我看到有时 class 中不依赖于实例状态的方法被标记为 static
。我发现它很清楚地宣传了 'this method is independent of instance state'。在检查不一致状态的可能性时,很容易完全跳过该方法。
但是,将方法标记为静态的问题是静态方法不能被继承或覆盖。
这里讨论了这样的事情:
使用注解来声明非静态方法是状态无关的是否有意义?然后编译器可以验证它是否仅使用其他与状态无关的方法。
管道中是否有任何此类功能?
java中没有这样的机制。即使 static
也不能涵盖所有情况。静态方法仍然可以在静态上下文中改变状态。
class Example {
static int counter = 0;
static int add(int a, int b) {
counter++;
return a + b;
}
}
但是有一些研究使用静态分析来解决这个问题。看起来 JPure 有一个工作原型
我看到有时 class 中不依赖于实例状态的方法被标记为 static
。我发现它很清楚地宣传了 'this method is independent of instance state'。在检查不一致状态的可能性时,很容易完全跳过该方法。
但是,将方法标记为静态的问题是静态方法不能被继承或覆盖。
这里讨论了这样的事情:
使用注解来声明非静态方法是状态无关的是否有意义?然后编译器可以验证它是否仅使用其他与状态无关的方法。
管道中是否有任何此类功能?
java中没有这样的机制。即使 static
也不能涵盖所有情况。静态方法仍然可以在静态上下文中改变状态。
class Example {
static int counter = 0;
static int add(int a, int b) {
counter++;
return a + b;
}
}
但是有一些研究使用静态分析来解决这个问题。看起来 JPure 有一个工作原型