gpt4 book ai didi

java - effective Java Item1 - 用于创建对象的静态工厂方法

转载 作者:行者123 更新时间:2023-12-01 09:07:45 24 4
gpt4 key购买 nike

我正在阅读Effective java item 1,其中讨论了用于对象创建的“静态工厂方法与构造函数”。提到的缺点之一如下:

“仅提供静态工厂方法的主要缺点是没有公共(public)或 protected 构造函数的类不能被子类化。”

还提到这很好,因为它将把对象组合提升为继承。然而,当你确实想要继承时,这不是一个严重的限制吗?当我之前不知道该类是否要扩展时,为什么我应该更喜欢使用静态工厂方法来创建对象?

最佳答案

Why should I prefer static factory methods for object creation, when I do not know from before if the class is going to be extended or not?

这个问题的答案在Effective Java Item 17:继承的设计和文档,否则就禁止它。设计继承类需要做更多的工作,包括以下内容。

  1. 准确记录重写任何方法的效果。
  2. 提供钩子(Hook)方法。
  3. 测试子类(通过自己实现这些类)。
  4. 限制构造函数以避免所有可重写的方法。
  5. 考虑 CloneableSerialized 接口(interface)及其对继承的影响。

如果您已完成所有这些工作,那么您将不会仅提供静态工厂方法。您还将提供至少一个公共(public)或 protected 构造函数。

Effective Java 详细介绍了每一点,但最终的建议是,

The best solution to this problem is to prohibit subclassing in classes that are not designed and documented to be safely subclassed.

关于java - effective Java Item1 - 用于创建对象的静态工厂方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41126121/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com