假设我有一个 try 语句和空 catch 是不好的做法吗?例如,假设我有两次单独的尝试,其中一次可能失败,但另一次成功,或者两者都成功,或者任何可能的组合。处理这样的代码是不好的做法吗?
Example
if( mode == Modes.EDIT ){
try {user = userBo.findById(id).get(0); }
catch(Exception e) { }
try{
result = this.initializeEntityById(accountDao, id);
if( !result.equals(SUCCESS) ){
return result;
}
}
catch(Exception e){ }
}
在这个例子中,涉及的变量是“id”,我不确定传入的值是否有效,在前端,这并不重要,因为代码会处理传入的任何内容并提供正确的显示。
所以问题确实是:
- 对于空捕获来说这是一个不好的做法吗?
- 是否存在我没有意识到的潜在不稳定因素?
- 有没有更好的方法来实现我想要的目标?
-
是的,这总是不好的做法因为你不知道哪里出了问题。您至少应该记录异常。
- 不稳定性在于,当出现问题时,您不知道代码出了什么问题。
- It's never desirable to use exceptions for control-flow. The performance is atrocious, and exceptions should only be used for exceptional circumstances. Here's what you can do:
- 将异常作为方法签名的一部分,并让更高级别处理它。
- 捕获异常,但将其包装在语义上适当的异常中并重新抛出它,以便更高级别可以处理它。
- Handle it. This can also be done in multiple ways:
- 不要让异常发生:不是捕获异常,而是对数据进行检查以查看是否会导致异常。例如,在你的情况下,我认为你应该有一个类似的方法
userBo.existsWithId(id)
这将返回一个boolean
表示该用户是否存在。或者有findById
return null
如果找不到用户,检查是否user == null
. 我认为这是你最好的选择。
- 以某种理智的方式从异常中恢复(取决于您的业务逻辑)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)