我下面的代码正常运行。代码使用Java8 optional.ofNullable和 isPresent。
Optional<String> dateOptional = null;
try {
dateOptional = Optional.ofNullable(src.getCreateDate());
if (dateOptional.isPresent()) {
date = dateFormat.parse(dateOptional.get());
trg.setCreateDate(date);
}
dateOptional = Optional.ofNullable(src.getSubmitDate());
if (dateOptional.isPresent()) {
date = dateFormat.parse(dateOptional.get());
trg.setSubmitDate(date);
}
} catch (ParseException e) {
throw new BadRequestError(ErrorMessages.INVALID_DATE_STRING);
}
但是当我使用ifPresent并在其中传递匿名函数时。像下面这样。这样代码可以更紧凑。
Optional.ofNullable(src.getCreateDate()).ifPresent(createDate ->
trg.setCreateDate(dateFormat.parse(createDate)));
IDE建议我用try catch包围您的代码。即使这样做了,它还是再次要求在同一行上。
try {
Optional.ofNullable(src.getCreateDate()).ifPresent(createDate -> trg.setCreateDate(dateFormat.parse(createDate)));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
这是某种语言默认值,还是Java中使用的默认匿名函数,还是某种范围问题。
如果是,为什么IDE感到困惑?还有其他解决方法吗? 有人可以解释这种行为吗?