什么时候在方法签名上使用Java中的static关键字被认为是不好的做法?如果方法基于某些参数执行函数,并且不需要访问非静态的字段,那么您是否总是希望这些类型的方法是静态的?
Kev*_*ion 48
您将在大型Java应用程序中遇到的两个最大的弊端是
这些破坏了代码的模块性,可扩展性和可测试性,我意识到我无法在这个有限的时间和空间中说服你.
*"纯函数"是任何不修改任何状态的方法,其结果仅取决于提供给它的参数.因此,例如,任何执行I/O(直接或间接)的函数都不是纯函数,但Math.sqrt()当然是.
关于纯粹功能(自我链接)的更多blahblah以及为什么要坚持它们.
我强烈建议您支持"依赖注入"编程风格,可能由Spring或Guice等框架支持(免责声明:我是后者的合着者).如果你这样做的权利,你会基本上是永远需要可变静止状态还是非纯静态方法.
Jon*_*eet 33
您可能不希望它是静态的一个原因是允许它在子类中被覆盖.换句话说,行为可能不依赖于对象内的数据,而是取决于对象的确切类型.例如,你可能有一个通用的集合类型,有isReadOnly这将财产归还false在始终可变集合,true在始终不变的集合,而在其他依赖于实例变量.
但是,根据我的经验,这种情况非常罕见 - 通常应明确说明.通常我会创建一个不依赖于任何对象状态静态的方法.
Pas*_*ent 24
一般来说,我更喜欢实例方法,原因如下:
在我看来,静态方法对于实用程序类(例如StringUtils)是可以的,但我更愿意尽可能避免使用它们.