【发布时间】:2020-11-06 16:50:50
【问题描述】:
为什么在使用ifPresentOrElsejava可选方法时,orElse部分不能抛出checked Exception?
例如:
dao.findBook(id).ifPresentOrElse(book -> {
printingService.print(book, printerName);
changeBookPrintDate(book.getId(), LocalDateTime.now());
}, () -> new BookNotFoundException());
其中BookNotFoundException 是扩展Exception 类的自定义异常(检查异常)。
但是这段代码让编译器不爽:
unreported exception com...exception.BookNotFoundException; must be caught or declared to be thrown
(知道它已经在方法声明中抛出,并且用try catch包围这个块并不能解决编译问题。
但如果我们将BookNotFoundException 扩展为RuntimeException(未选中),那么一切都会完美运行。
有人知道为什么吗?
在这个 java 9 Optional 方法中阻止抛出此类异常的原因是什么?
为什么我应该将我的异常设置为 RuntimeException 以使其工作,而它更多地被视为 'custom exception' 而不是 'runtime' ?
这个question 正在解决同样的问题,但对于 java 8 lambdas,所以我不知道这是否同样适用于 java 9 Optionals。
除了确认 it is not possible 之外,其他 researches 无处可寻。
有什么想法吗?
【问题讨论】:
标签: java exception optional java-9 java-11