java - 为什么 java.time 使用 'of' 而不是 'new' 作为日期?
问题描述
在 Java 8 的新日期包中,我们从使用“ new Date()”更改为“LocalDate.of ()”。
Date d = new Date(year, month, dayOfMonth); //Old way
LocalDate d2 = LocalDate.of(year, month, dayOfMonth); //new way
当您想要一个新对象时,您通常使用new
关键字。这是一种创建新对象的直观方式。
有时,当您需要延迟初始化的单例时,您可以使用静态方法来获取实例。在这种情况下,您必须调用它,getInstance()
以便开发人员知道会发生什么。
这种新语法使代码不那么直观。它迫使您学习如何处理特定对象,而不是简单地使用它们。
这种变化有什么好的理由吗?
解决方案
通常静态工厂方法比构造函数更受欢迎,原因有几个,
- 他们有一个名字,这使您的代码更具可读性。
- 静态工厂方法可以具有协变返回类型,但构造函数不能。这允许您的 API 用户使用接口而不是实现,从而为您在未来版本中更改具体类型提供更多空间。它也减少了 API 的概念表面积。
- 与构造函数不同,静态工厂方法可以进行某些优化。相反,每次调用构造函数时,都希望它返回一个新对象。例如,查看静态工厂方法的实现
Collections.emptyList();
public static final List EMPTY_LIST = new EmptyList<>();
public static final <T> List<T> emptyList() {
return (List<T>) EMPTY_LIST;
}
它急切地创建一个单例列表并在每次调用时返回它,从而节省使用构造函数时可能发生的不必要的开销。
由于上述原因,在当今的编程中,静态工厂优于构造函数。但是,如果new
情况允许,您仍然可以将关键字与构造函数一起使用。
推荐阅读
- java - 我的 batis java 解析 SQL Mapper 配置时出错
- java - Jpanel 2d 对象数组绘制问题
- python - 将列表转换为数据框的问题 - 并非所有元素都放入数据框
- python-3.x - 读取整数并打印整数的 Python 代码,它是 2 或 5 但不是两者的倍数
- r - 复制图 Rstudio
- python - 我需要在 Qslider 上打几个标记
- python - 如何在 seaborn 中使用箱线图绘制多个数字特征
- javascript - 如何在同一个 vue 组件中使用 props
- sharepoint - 将 csv 文件从 SSIS 写入 SharePoint
- python - 为了判断相同的对象,bool函数在python中给出了两种不同的结果