创建静态实用程序类的缺点是什么?我做的越多,我发现它们就越有用。我知道他们缺乏面向对象的设计,但我仍然比他更应该爱他们。是否有任何其他利弊用途?
答案 0 :(得分:16)
在正确的背景下,他们没有任何问题。如果你有独立的无状态方法(比如在java.lang.Math
中找到的那些方法),那么静态类就是它们的理想之地。他们在课堂上的唯一原因是因为Java没有独立方法的概念。
答案 1 :(得分:13)
IMO的主要缺点是使用大多数模拟框架不可能模拟这种实用方法的实现,以便使用这些实用方法对某些类进行单元测试。
例如,使用System.currentTimeMillis()
很容易获得当前时间。但是当你必须测试一个使用当前时间做一些工作的类时,就不可能模拟该方法使它返回一个特定的时间点。使用实现Clock
接口并注入到对象中进行测试的对象使其更容易:您可以创建一个模拟时钟实现,在被要求获取当前时间时返回特定日期。
答案 2 :(得分:4)
我之前在一篇文章中谈过这个问题,你可以找到here。
使用静态方法的主要问题是:
但是,如果方法本身不是太麻烦并且几乎可以预测(即对实现的不同变化等没有太多要求),那么没有理由为什么静态方法不适合该法案。因此,故事的寓意是使用它,但要注意副作用。