我有一个 Java 方法如下:
private static boolean isDateBetweenRange(DataSet obj, MyClass dataSource, ConditionContext context) {
FilterContext fc = dataSource.getData();
LocalDate dateFieldToCheck = obj.getDate(fc.getDateField()).toInstant()
.atZone(ZoneId.systemDefault()).toLocalDate();
LocalDate minDate = fc.getMinDateValue();
LocalDate maxDate = fc.getMaxDateValue();
if (minDate == null || maxDate == null) {
minDate = context.getStartDate().toInstant().atZone(ZoneId.systemDefault())
.toLocalDate();
maxDate = context.getEndDate().toInstant().atZone(ZoneId.systemDefault())
.toLocalDate();
}
boolean result = (dateFieldToCheck.isAfter(minDate) || dateFieldToCheck.isEqual(minDate))
&& (dateFieldToCheck.isBefore(maxDate) || dateFieldToCheck.isEqual(maxDate));
return result;
}
我也想为 LocalDateTime
制定相同的逻辑。如果我重载该方法,它将与 LocalDateTime
的代码完全相同。
如何使用泛型或任何其他机制使方法通用以与 LocalDate
和 LocalDateTime
一起使用?
如何根据我的类型使 context.getXXXDate()... toLocalDate()
或 toLocalDateTime()
成为通用代码?
最佳答案
TemporalAccessor
接口(interface)可用于执行此操作。但是,请注意 TemporalAccessor
是一个高级接口(interface),不应在低级实用程序代码之外使用。
boolean api(TemporalAccessor temporal1, TemporalAccessor temporal2) {
LocalDate date1 = LocalDate.from(temporal1);
LocalDate date2 = LocalDate.from(temporal2);
return ...;
}
此代码现在将接受 LocalDate
、LocalDateTime
、OffsetDateTime
和 ZonedDateTime
。
如评论中所述,在一段业务逻辑中仅调用一次 ZoneId.systemDefault()
至关重要,因为该值可能会发生变化。
关于java-8 - 如何使方法通用以与 LocalDate 和 LocalDateTime 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44694236/