当有后置条件时,方法的返回值不能为空,可以做什么?
我可以
assert returnValue != null : "Not acceptable null value";
Run Code Online (Sandbox Code Playgroud)
断言可以关闭!
所以可以这样做
if(returnValue==null)
{
throw new NullPointerException("return value is null at method AAA");
}
Run Code Online (Sandbox Code Playgroud)
?
或者,对于这样的条件,使用用户定义的异常(如NullReturnValueException)会更好吗?
我处理具有遗留服务层的项目,如果请求的记录不存在,则在许多地方返回null,或者由于呼叫者未被授权而无法访问.我在谈论ID要求的特定记录.例如,类似于:
UserService.get(userId);
Run Code Online (Sandbox Code Playgroud)
我最近推动改变这个API,或者补充一个抛出异常的新API.关于已检查与未经检查的例外的争论随之而来.
从JPA/Hibernate等人的设计者那里得到一个说明,我建议未经检查的异常可能是最合适的.我的论点是,无法合理地期望API的用户从这些异常中恢复,并且在99%的情况下,我们最多只能通知应用程序用户发生了一些错误.
将运行时异常传播到通用处理机制显然会减少处理边缘情况异常所涉及的许多复杂性和所需的分支处理.但是,围绕这种方法存在很多担忧(这是正确的).
为什么选择JPA/EJB和Hibernate等项目的设计者使用未经检查的异常模型?它有充分的理由吗?有什么利弊.使用这些框架的开发人员是否仍然可以使用适配器包装器之类的东西处理接近它们抛出位置的运行时异常?
我希望这些问题的答案可以帮助我们对自己的服务层做出"正确"的决定.