我有以下功能:
private Box retrieveBox() {
BoxParameter param = new BoxParameter("red", 10, 5, 3);
List<Long> boxIds = boxDao.retrieveByParameter(param);
if (boxIds.isEmpty()) {
// A
logger.warn("box not found");
throw new BoxNotFoundException();
}
if (boxIds.size() > 1) {
// B
logger.warn("multiple boxes found");
throw new MultipleBoxesFoundException();
}
Optional<Box> maybe = boxDao.retrieve(boxIds.get(0));
if (maybe.isPresent()) {
return maybe.get();
}
// C
logger.warn("box not found");
throw new BoxNotFoundException();
}
当我尝试将日志记录和异常重构为名为logWarningAndThrowException()
的方法时,我发现:
我想知道原因。
有没有办法将C提取到方法中?
答案 0 :(得分:1)
除了void
之外,任何返回类型的方法都必须返回该类型的值,或者为结束方法执行抛出异常。
在当前状态下,您的方法将抛出异常以结束方法执行,但如果您将C part
移至另一个方法,则您的retrieveBox
方法必须返回类型为Box
的值正常完成。
因此eclipse抱怨。