我有一个接受=
的谓词,我想检查它是否存在并且new
是否在当前日期之前。
我可以使用if语句来编写它:
Optional<LocalDateTime>
我该如何使用LocalDateTime
和@Override
public boolean test(Optional<ResetPassword> resetPassword) {
if (resetPassword.isPresent()) {
if (!resetPassword.get().getValidUntil().isBefore(LocalDateTime.now())) {
throw new CustomException("Incorrect date");
}
return true;
}
return false;
}
函数来重写它?
答案 0 :(得分:1)
绝对不要使用Optional
作为任何参数。相反,您应该让函数采用ResetPassword
,并且仅当存在Optional
的值时才调用它。
像这样:
public void test(ResetPassword resetPassword) {
if (!resetPassword.getValidUntil().isBefore(LocalDateTime.now())) {
throw new CustomException("Incorrect date");
}
}
然后这样称呼它:
resetPasswordOptional
.ifPresent(rp -> test(rp));
答案 1 :(得分:0)
我希望这一程序对您有所帮助,此外,请注意如果是RuntimeException
,则在出现错误情况时您的应用将崩溃的异常。
public boolean test(Optional<ResetPassword> resetPassword) {
return resetPassword.isPresent() && resetPassword
.map(ResetPassword::getValidUntil)
.filter(localDateTime -> localDateTime.isBefore(LocalDateTime.now()))
.orElseThrow(() -> new CustomException("Incorrect date")) != null;
}