我有以下代码:
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();
}
我可以使用一些接口或抽象类吗?因为这样我就不必写两次相同的代码了?我找不到这样的接口。正如您所看到的,我只使用了"isBefore"one_answers"isAfter"方法。
这些类共享了更通用的类型,例如Temporal
。但它们并不是应用程序开发人员通常要使用的。
并且那些更通用的类型不共享isBefore
/isAfter
方法。
我认为您被这些巧合命名的方法愚弄了,以为这些日期-时间类只是彼此的变体。但事实并非如此。LocalDate
实际上与LocalDateTime
不同。因此,在提到DRY标签时,您实际上并没有在这里重复自己。试图抽象出只有日期和有时间的日期之间的区别是无效的。
相反,请注意LocalDate
是如何实现更通用的接口ChronoLocalDate
的,isBefore
/isAfter
方法就是从这里来的。Java中的五个类(HijrahDate、JapaneseDate、LocalDate、MinguoDate、ThaiBuddhistDate(以及ThreeTen Extra项目中的更多类共享该接口。这些类是同一种动物,用不同的方式来识别日历上的每个日期。对于这些类,将所有这些类抽象为ChronoLocalDate
在逻辑上是合适的,并且(显然(对java.time框架很有用。
请注意,我并不是建议在您的应用程序中使用ChronoLocalDate
。Javadoc明确警告我们不要将这种用法作为一般规则。我只是想表明,只有日期的课程"有点一样",而只有日期的和有时间的课程则不同。
即时。LocalDate和LocalDateTime都可以转换为Instant。