我正在学习“ 有效的Java”
,书中并未建议我认为一些标准的东西,例如对象的创建,我的印象是构造函数是最好的方法,书中说我们应该利用在静态工厂方法中,我不能说出一些优点,而在缺点中却有缺点,所以我在问这个问题,这是使用它的好处。
优点:
- 静态工厂方法的一个优点是,与构造函数不同,它们具有名称。
- 静态工厂方法的第二个优点是,与构造函数不同,不需要每次调用它们时都创建一个新对象。
- 静态工厂方法的第三个优点是,与构造函数不同,它们可以返回其返回类型的任何子类型的对象。
- 静态工厂方法的第四个优点是它们减少了创建参数化类型实例的冗长性。
缺点:
- 仅提供静态工厂方法的主要缺点是,没有公共或受保护的构造函数的类不能被子类化。
- 静态工厂方法的第二个缺点是它们不易与其他静态方法区分开。
参考:有效的Java,Joshua Bloch,第2版,第5-10页
我无法理解第四个优点和第二个缺点,如果有人可以解释这些观点,我将不胜感激。我还想了解如何决定使用构造函数还是静态工厂方法来创建对象。
Foo<Map<Key, Value>> foo = new Foo<Map<Key, Value>>();
与
Foo<Map<Key, Value>> foo = Foo.createFoo(); // no need to repeat
当引入Diamond语法时,Java 7将不再具有这种优势
static
方法是用于构造函数还是用于其他对象。至于如何选择-没有一个单一的食谱。在给定用例的情况下,您可以权衡所有上述优点和缺点,但是在大多数情况下,这只是由经验决定的。
本文向大家介绍javascript工厂模式和构造函数模式创建对象方法解析,包括了javascript工厂模式和构造函数模式创建对象方法解析的使用技巧和注意事项,需要的朋友参考一下 工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程(本书后面还将讨论其他设计模式及其在JavaScript 中的实现)。考虑到在ECMAScript 中无法创建类,开发人员就发明了一种函数,用
问题内容: 有效的Java说“考虑提供静态工厂方法而不是构造函数” 如果你有一个 为类A提供此方法是否有意义,而不是在代码中调用new A()。 问题答案: 请参阅此处以很好地说明您可能要执行此操作的主要原因。综上所述: 命名为“构造函数”。 如果合适,可以返回null。 如果合适,可以返回派生类的实例。 在实例化泛型类型的变量时减少冗长。 我想到了本文没有提及的另一个原因:可以实现有趣的逻辑来避
问题内容: 类允许客户获得实例的通常方法是提供一个公共构造器。另一种方法是提供一个公共的静态工厂方法,该方法只是一个返回类实例的静态方法。使用静态工厂方法的优缺点是什么? 问题答案: 《有效Java》一书中的这一章对此进行了很好的解释:考虑使用Static Factory而不是Constructors 。它以您可以理解的最佳方式说明了它们各自的优缺点。 只是引用本书的优点和缺点: 优点 : 静态工
已经阅读了如何通过以下步骤使类不可变 null 我不确定我是否清楚地理解了私有构造函数和工厂方法在不变性上下文中的效用。如果我使class final,基本上就是关闭扩展它的任何其他类的所有路径。这是一种更复杂的方法吗 我见过单例模式中的私有构造函数、工厂方法,这很有意义。但是当我们谈到对象的不可变性时,当我们提到私有构造函数和静态工厂方法时,我们是否也在限制对象构造/实例化??
问题内容: 我最近发现了一种在Google Guava和Project Lombok中 创建对象的新实例的有趣方法:将构造函数隐藏在静态creator方法后面。这意味着您要做的不是执行操作。 我的问题是为什么?隐藏构造函数有什么好处?在我看来,这样做绝对没有优势,而且似乎违反了基本的对象创建原则。由于开始时您使用而不是某种方法创建对象。这似乎是为了创建方法而创建方法。 您从中得到什么? 问题答案:
Javassist的API似乎允许我们创建类中声明的类初始值设定项(即静态构造函数)的精确副本: 但是,该副本还包括(公共/私有)静态最终字段。例如,以下类的静态构造函数: 事实上是: 因此,静态构造函数的精确副本也将包括对最终字段“名称”的调用。 有没有办法创建不包含对final字段的调用的静态构造函数的副本? --谢谢