我看到有时类中不依赖实例状态的方法被标记为static
。我发现它很明显,它宣称'这种方法独立于实例状态'。当审查状态不一致的机会时,完全忽略该方法是很容易的。不读取/写入实例状态的标记方法
但是,将静态方法标记为静态方法的问题是无法继承或覆盖静态方法。
像这样的事情在这里讨论:Does it make sense to have a non static method which does not use an instance variable?
会是有意义的有一个注释来声明非静态方法是状态无关?然后编译器可以验证它只使用其他独立于状态的方法。
管道中是否有这样的功能?
当然会。这就是为什么C++有* const *的原因。也许你想检查是否有人在java社区过程中发出请求;如果不;启动它;-)但严重 - * static *上的另一个视图是:这是OO内的异常。除了你提到的问题之外,静态调用还会导致更紧密的耦合;和更难测试的代码。所以重点是:你尽可能避免它。 – GhostCat
@GhostCat请注意,这与C++ const不同,这基本上提出了可覆盖/虚拟静态方法。 – hyde
@hyde是的......当我向方法传递两个参数并获得一个返回值时,有时候我想确保(1)该方法仅使用这个类中的这两个输入,(2)它不以任何方式改变状态。 – Teddy