日期时间设计原则

Date-Time API 是使用几种设计原则开发的。

Clear

API 中的方法定义良好,行为明确且可预期。例如,使用null参数值调用 Date-Time 方法通常会触发NullPointerException

Fluent

Date-Time API 提供了一个流畅的interface,使代码易于阅读。因为大多数方法都不允许带有null值的参数并且不返回null值,所以方法调用可以链接在一起,并且可以快速理解结果代码。例如:

LocalDate today = LocalDate.now();
LocalDate payday = today.with(TemporalAdjusters.lastDayOfMonth()).minusDays(2);

Immutable

Date-Time API 中的大多数类都创建immutable的对象,这意味着在创建对象之后,将无法对其进行修改。要更改不可变对象的值,必须将新对象构造为原始对象的修改后的副本。根据定义,这也意味着 Date-Time API 是线程安全的。这会影响 API,因为大多数用于创建日期或时间对象的方法都以offromwith作为前缀,而不是构造函数,并且没有set方法。例如:

LocalDate dateOfBirth = LocalDate.of(2012, Month.MAY, 14);
LocalDate firstBirthday = dateOfBirth.plusYears(1);

Extensible

Date-Time API 在任何可能的地方都是可扩展的。例如,您可以定义自己的时间调节器和查询,或者构建自己的 calendar 系统。