当前位置: 首页 > 面试题库 >

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

濮阳宜
2023-03-14
问题内容

为什么LocalDateLocalTimeStream,等对象使用一个工厂方法of()而不是构造的?

我找到了为什么应该使用工厂方法而不是new
[此处的解释。这个答案给出了很多原因,但是与Java日期/时间API相关的唯一事情是:

与构造函数不同,它们不需要在每次调用时都创建一个新对象

因为LocalDateLocalTime是不可变的,所以使用工厂并重用现有对象而不是每次都创建新对象可能是有意义的。

这是为什么要使用工厂方法(例如)创建LocalDateLocalTime创建对象的原因LocalDate.of()吗?还有其他原因吗?

而且,Stream对象是可变的。为什么使用工厂方法(Stream.of())创建一个Stream


问题答案:

为什么使用工厂方法(Stream.of())创建Stream?

使用工厂方法意味着您不需要知道所使用的确切类。这是一个很好的示例,就像Stream接口一样,您不能创建接口的实例。

从来源 Stream.of

/**
 * Returns a sequential {@code Stream} containing a single element.
 *
 * @param t the single element
 * @param <T> the type of stream elements
 * @return a singleton sequential stream
 */
public static<T> Stream<T> of(T t) {
    return StreamSupport.stream(new Streams.StreamBuilderImpl<>(t), false);
}

/**
 * Returns a sequential ordered stream whose elements are the specified values.
 *
 * @param <T> the type of stream elements
 * @param values the elements of the new stream
 * @return the new stream
 */
@SafeVarargs
@SuppressWarnings("varargs") // Creating a stream from an array is safe
public static<T> Stream<T> of(T... values) {
    return Arrays.stream(values);
}

注意:这些方法调用其他工厂方法。

您可以看到根据其调用方式而得到不同的构造。您不需要知道这一点,也不必知道创建的最终类是ReferencePipeline.Head



 类似资料:
  • 已经阅读了如何通过以下步骤使类不可变 null 我不确定我是否清楚地理解了私有构造函数和工厂方法在不变性上下文中的效用。如果我使class final,基本上就是关闭扩展它的任何其他类的所有路径。这是一种更复杂的方法吗 我见过单例模式中的私有构造函数、工厂方法,这很有意义。但是当我们谈到对象的不可变性时,当我们提到私有构造函数和静态工厂方法时,我们是否也在限制对象构造/实例化??

  • 问题内容: 类允许客户获得实例的通常方法是提供一个公共构造器。另一种方法是提供一个公共的静态工厂方法,该方法只是一个返回类实例的静态方法。使用静态工厂方法的优缺点是什么? 问题答案: 《有效Java》一书中的这一章对此进行了很好的解释:考虑使用Static Factory而不是Constructors 。它以您可以理解的最佳方式说明了它们各自的优缺点。 只是引用本书的优点和缺点: 优点 : 静态工

  • 问题内容: 我正在学习“ 有效的Java” ,书中并未建议我认为一些标准的东西,例如对象的创建,我的印象是构造函数是最好的方法,书中说我们应该利用在静态工厂方法中,我不能说出一些优点,而在缺点中却有缺点,所以我在问这个问题,这是使用它的好处。 优点: 静态工厂方法的一个优点是,与构造函数不同,它们具有名称。 静态工厂方法的第二个优点是,与构造函数不同,不需要每次调用它们时都创建一个新对象。 静态工

  • 问题内容: 我在这里找不到任何合理的答案,所以我希望它不会重复。那么为什么我应该更喜欢setter或构造函数注入而不是简单注入 如果您在类初始化期间需要对注入的bean进行某些操作,则可以使用构造函数注入的用法 但是仍然,它几乎和方法一样,并且我完全不会进行setter注入,这不只是Spring和其他DI框架之后的遗物吗? 问题答案: 构造函数和属性注入使您可以轻松地在非CDI环境中(例如,单元测

  • 本文向大家介绍javascript工厂模式和构造函数模式创建对象方法解析,包括了javascript工厂模式和构造函数模式创建对象方法解析的使用技巧和注意事项,需要的朋友参考一下 工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程(本书后面还将讨论其他设计模式及其在JavaScript 中的实现)。考虑到在ECMAScript 中无法创建类,开发人员就发明了一种函数,用

  • 操作步骤: 菜单栏: Refactor —>Replace Constructor with Factory Method...