java中的静态实用程序类的缺点?

时间:2011-07-10 15:59:00

标签: java static

创建静态实用程序类的缺点是什么?我做的越多,我发现它们就越有用。我知道他们缺乏面向对象的设计,但我仍然比他更应该爱他们。是否有任何其他利弊用途?

3 个答案:

答案 0 :(得分:16)

在正确的背景下,他们没有任何问题。如果你有独立的无状态方法(比如在java.lang.Math中找到的那些方法),那么静态类就是它们的理想之地。他们在课堂上的唯一原因是因为Java没有独立方法的概念。

答案 1 :(得分:13)

IMO的主要缺点是使用大多数模拟框架不可能模拟这种实用方法的实现,以便使用这些实用方法对某些类进行单元测试。

例如,使用System.currentTimeMillis()很容易获得当前时间。但是当你必须测试一个使用当前时间做一些工作的类时,就不可能模拟该方法使它返回一个特定的时间点。使用实现Clock接口并注入到对象中进行测试的对象使其更容易:您可以创建一个模拟时钟实现,在被要求获取当前时间时返回特定日期。

答案 2 :(得分:4)

我之前在一篇文章中谈过这个问题,你可以找到here

使用静态方法的主要问题是:

  1. 其他海报指出的可嘲性。
  2. 可以在应用程序中加载几个版本的静态类,具体取决于为类加载器的整个层次结构配置的类加载器层次结构和类路径。 (第三个元素也是如果类加载器被配置为父优先或子优先。)使测试和调试成为一场噩梦。
  3. 无法继承静态方法。因此违反了OCP (Open Closed Principle),即静态方法不可扩展。请查看Log4J以了解静态方法的典型问题。
  4. 静态方法不适用于Interface Segregation PrincipleStrategy模式的应用。根据个人用例,不可能使用类似算法的替代实现,而无需使用大量喷涂的手写代码"如果条件"。
  5. 但是,如果方法本身不是太麻烦并且几乎可以预测(即对实现的不同变化等没有太多要求),那么没有理由为什么静态方法不适合该法案。因此,故事的寓意是使用它,但要注意副作用。