对象的创建:构造函数或静态工厂方法

雷切尔:

我正在学习“ 有效的Java”,书中并未建议我认为一些标准的东西,例如对象的创建,我的印象是构造函数是最好的方法,书中说我们应该利用在静态工厂方法方面,我不能说一些优点,而在缺点方面却很少,所以我在问这个问题,这是使用它的好处。

优点:

  1. 静态工厂方法的一个优点是,与构造函数不同,它们具有名称。
  2. 静态工厂方法的第二个优点是,与构造函数不同,它们不需要在每次调用时都创建一个新对象。
  3. 静态工厂方法的第三个优点是,与构造函数不同,它们可以返回其返回类型的任何子类型的对象。
  4. 静态工厂方法的第四个优点是它们减少了创建参数化类型实例的冗长性。

缺点:

  1. 仅提供静态工厂方法的主要缺点是,没有公共或受保护的构造函数的类不能被子类化。
  2. 静态工厂方法的第二个缺点是它们不易与其他静态方法区分开。

参考:有效的Java,Joshua Bloch,第2版,第5-10页

我无法理解第四个优点和第二个缺点,如果有人可以解释这些观点,我将不胜感激。我还想了解如何决定使用构造函数还是静态工厂方法来创建对象。

博zh:
  • 优势4:使用构造函数时,

    Foo<Map<Key, Value>> foo = new Foo<Map<Key, Value>>();
    

    Foo<Map<Key, Value>> foo = Foo.createFoo(); // no need to repeat
    

    当引入Diamond语法时,Java 7将不再具有这种优势

  • 缺点2.您不能轻易分辨给定static方法是用于构造函数还是用于其他对象。

至于如何选择-没有一个单一的食谱。在给定用例的情况下,您可以权衡上述所有优点和缺点,但是大多数情况下,这只是由经验决定的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

静态工厂方法而不是构造函数

如何使用“静态工厂方法”代替构造函数?

构造函数与工厂方法

返回构造函数的工厂方法的键入

何时使用构造函数以及何时使用getInstance()方法(静态工厂方法)?

工厂方法构造Java对象:属性vs构造函数(通过方法)

C ++静态工厂方法与构造函数:如何避免复制?

在工厂方法中测试对象的创建

静态工厂方法每次调用都会创建一个新对象

为什么LocalDate,LocalTime和Stream对象使用工厂方法of()而不是构造函数?

具有受保护的构造函数和工厂方法的对象列表的自动修复

如何在工厂方法中为Hashmap <String Boolean>创建构造函数?

具有从工厂方法创建的私有构造函数的单元测试类

工厂方法与工厂对象

什么是静态工厂方法?

公共静态工厂方法

如何使用静态工厂方法创建抽象类?

clone()vs复制构造函数vs工厂方法?

强制子类具有特定的工厂方法或构造函数

Android片段工厂方法与构造函数重载

克隆是否比构造函数/工厂方法提供了性能改进?

我们是否需要比静态工厂方法更喜欢构造函数?如果是这样,什么时候?

将 xml 解析为 java 对象时没有单字符串构造函数/工厂方法错误

使用带有类型参数的工厂方法,使用参数化的构造函数创建派生类

Dart命名构造函数,静态方法和工厂构造函数

接口内部的静态工厂方法

静态工厂方法的实际用例?

静态工厂方法的C ++类型推导

继承和静态工厂方法