我正在为一个项目编写一些异常处理,在这些项目中,我必须根据catch块中的错误代码抛出异常。我是通过以下方式完成的:
public BankStatistics fetchBankStatistics(final Customer id) {
final BankStatistics bs= this.bankStatService.fetchStatDetails(id);
return bs;
} catch (final StaticticsProcessingexception ex) {
if (ex.getErrorCode().equals("STAT-102")) {
// log the error
throw new MyNewCustomException(ERROR.INVALID_CUST_ID)
}
if (ex.getErrorCode().equals("STAT-103")) {
// log the error
throw new MyNewCustomException(ERROR.CUST_DOES_NOT_EXIST)
}
if (ex.getErrorCode().equals("STAT-104")) {
// log the error
throw new MyNewCustomException(ERROR.CUST_NOT_AUTHENTICATED)
}
return null;
}
上面的代码可以编译,但是我不知为何不喜欢从catch块返回null的想法。如果上面的代码是处理这种情况的最佳方法,或者还有其他方法,您是否可以提出建议?
答案 0 :(得分:1)
在这种情况下,为什么不扔ex?
答案 1 :(得分:1)
您可能会使用空消息引发YourNewCustomException。
throw new MyNewCustomException();
答案 2 :(得分:1)
在这种情况下,我提供以下观点。我建议将错误代码映射作为键,将其他详细信息作为值。例如,您可以像这样维护。
Map<String,String> errMap = new HashMap<>();
errMap.put("STAT-102",ERROR.INVALID_CUST_ID);
errMap.put("STAT-103",ERROR.CUST_DOES_NOT_EXIST);
errMap.put("STAT-104",ERROR.CUST_NOT_AUTHENTICATED);
这样做的好处是,如果在异常块中可以这样简单地编写,则无需编写多个。
catch (final StaticticsProcessingexception ex) {
throw new MyNewCustomException(errMap.get(ex.getErrorCode()))
}
正如开曼爵士所建议的那样,除了基于业务需求的uup之外,还可以引发IllegalArgumentException,还可以创建自己的异常类,并可以通过处理错误来引发它。