如何使用 类 LocalDate 和 LocalDateTime 的抽象?

How to use abstraction with classes LocalDate and LocalDateTime?

我有以下代码:

LocalDate date;
LocalDate minDate;

//constructor...

if(date.isBefore(minDate)){
   throw new RuntimeException();
}

与 LocalDateTime 类似:

LocalDateTime date;
LocalDateTime minDate;

//constructor...

if(date.isBefore(minDate)){
   throw new RuntimeException();
}

我可以使用一些接口或抽象 class 吗?这样我就不必将相同的代码写两次了?我找不到这样的界面。 如您所见,我仅使用 'isBefore' 和 'isAfter' 方法。

即时。 LocalDate 和 LocalDateTime 都可以转换为 Instant。

这些 类 共享的通用类型较多,例如 Temporal。但它们不是一般由应用程序开发人员使用。

而那些更通用的类型不共享 isBefore/isAfter 方法。

我认为您被巧合命名的方法所愚弄,以为这些日期时间 类 只是彼此的变体。但他们不是。 LocalDateLocalDateTime 确实是不同的动物。因此,关于您的 DRY 标签,您实际上并没有在这里重复自己。试图抽象出仅日期和带时间的日期之间的区别是无效的。

相比之下,请注意 LocalDate 如何实现更通用的接口 ChronoLocalDate,其中 isBefore/isAfter 方法来自哪里。该界面由 Java 中的五个 类 共享(HijrahDate、JapaneseDate、LocalDate、MinguoDate、ThaiBuddhistDate),甚至 ThreeTen-Extra[=35= 中的更多 类 ] 项目。那些 类 是同一种动物,不同的方式来识别日历上的每个日期。对于这些 类 将所有这些 类 抽象为 ChronoLocalDate 在逻辑上是合适的,并且(显然)对 java.time 框架有用。

请注意,我并不是建议在您的应用中使用 ChronoLocalDate。 Javadoc 清楚地警告我们不要将这种用法作为一般规则。我只是想证明仅日期 类 是“有点相同”,而仅日期和带时间的日期 类 不是。