静态成员的替代方案

3

我想知道什么情况下只拥有静态方法和变量的类被认为是不好的实践,以及有哪些替代方法来避免这种情况。

我知道当你需要功能但不能或不需要对象实例时,它们是必需的。然而,我想知道这种情况是否是由于不良实践或错误的设计决策所导致。

谢谢


1
一个替代方案是使用“枚举”。你可以获得真正的单例“Object”实例。但从内存角度来看,它们并不便宜。 - Mena
这总是一个不好的实践,问题的根源在于它的真正用途缺失。我使用静态字段的唯一两个原因是1)用于存储常量(在.NET中由于技术原因比使用consts更好),2)用于不使用对象实例的私有方法。单例几乎总是由IoC容器处理。请查看https://dev59.com/BoPba4cB1Zd3GeqPmgRO - Valentin P.
3个回答

4

常见的替代方案是使用单例或实例类,其中只有一个实例。

这种方法更容易测试,并且可以注入不同的功能。

如果您的类没有字段

  • 使用没有实例的枚举类作为实用程序类。
  • 在可能的情况下,将静态方法移动到作为参数之一的类中。
  • 如果需要实现接口,请使用无状态单例。

2

只有final static变量的文件没有问题,这只是一种分组常量的方式。

然而,仅包含静态方法的典型helper/utils类往往会引发不良面向对象设计或成为其症状。

一个常见的例子是DateUtil类,Date类设计得太糟糕了,以至于需要使用工具。虽然创建自己的工具很诱人,但最好使用适当的日期API(如Yoda Time)或新的日期API。

因此,尽量避免这种类型的类,并将这些方法放在与相关对象紧密相关的位置。


0

我发现最好尝试只使用静态方法和值,就像本地Java包所做的那样。模板代码和纯功能性的东西。例如:三角函数、解析/转换数据等。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接