java - 考虑提供静态工厂方法而不是构造函数

标签 java

类允许客户端获取实例的正常方法是提供公共(public)构造函数。另一种方法是提供一个公共(public)静态工厂方法,它只是一个返回类实例的静态方法。使用静态工厂方法有什么优点和缺点?

最佳答案

《Effective Java》一书中的这一章对此进行了很好的解释:Consider Static Factory instead of Constructors 。它以您能理解的最佳方式解释了它们的所有优点和缺点。

仅引用书中的优点和缺点:

优点:

  • 静态工厂方法的一个优点是,与构造函数不同,它们有名称。
  • 静态工厂方法的第二个优点是,与构造函数不同,它们不需要在每次调用时创建一个新对象。
  • 静态工厂方法的第三个优点是,与构造函数不同,它们可以返回其返回类型的任何子类型的对象。
  • 静态工厂方法的第四个优点是它们减少了创建参数化类型实例的冗长性(这一点在 Java 7 中可以忽略)

缺点:

  • 仅提供静态工厂方法的主要缺点是没有公共(public)或 protected 构造函数的类无法子类化

  • 静态工厂方法的第二个缺点是它们不容易与其他静态方法区分开来。

您可以在我提供的链接中更详细地研究它们。

关于java - 考虑提供静态工厂方法而不是构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13046877/

相关文章:

java - 如何编写安全连接池的逻辑

java - 将 JSON 对象发送到 Android 中的 Web 服务会创建重复的 JSON 对象

java - 加密和序列化时出现 NullPointerException 异常

java - 我的 Android 库中的包结构更好

java - 从 Maven for Artifactory 本地下载 Artifact

java - 我无法在 RecyclerView 中同时显示波斯语和英语文本

java - 在不使用额外缓冲区的情况下从 Java 中的链表中删除重复项

java - 什么更好 : Key Listener or key Adapter?

java - 来自 Roo RESTful Controller 的 JSON 和 XML

java - 深度优先搜索列表路径到所有端节点