将 "throw new exception" 提取到方法中会导致编译错误
extracting "throw new exception" into a method causes compile error
我有以下功能:
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()
的方法中时,我发现:
- A 和 B 可以重构
- 如果C被提取到一个方法中,Eclipse会提示"This method must return a result of type Box"
我想知道这是为什么。
有没有办法将 C 提取到方法中?
除 void
之外的任何具有 return 类型的方法都必须 return 该类型的值,否则抛出异常以结束方法执行。
在您当前的状态下,您的方法将抛出异常以结束方法执行,但是如果您将 C part
移动到另一个方法,那么您的 retrieveBox
方法必须 return 类型为 Box
正常完成。
因此 eclipse 正在抱怨。
我有以下功能:
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()
的方法中时,我发现:
- A 和 B 可以重构
- 如果C被提取到一个方法中,Eclipse会提示"This method must return a result of type Box"
我想知道这是为什么。
有没有办法将 C 提取到方法中?
除 void
之外的任何具有 return 类型的方法都必须 return 该类型的值,否则抛出异常以结束方法执行。
在您当前的状态下,您的方法将抛出异常以结束方法执行,但是如果您将 C part
移动到另一个方法,那么您的 retrieveBox
方法必须 return 类型为 Box
正常完成。
因此 eclipse 正在抱怨。