我一直在决定如何在我的应用程序中处理异常.
如果我的异常问题来自1)通过远程服务访问数据或2)反序列化JSON对象.不幸的是,我不能保证这些任务中的任何一个都成功(切断网络连接,不正确的JSON对象,这是我无法控制的).
因此,如果我遇到异常,我只需在函数内捕获它并返回FALSE给调用者.我的逻辑是,所有调用者真正关心的是任务是否成功,而不是为什么它不成功.
这是典型方法的一些示例代码(在JAVA中)
public boolean doSomething(Object p_somthingToDoOn)
{
boolean result = false;
try{
// if dirty object then clean
doactualStuffOnObject(p_jsonObject);
//assume success (no exception thrown)
result = true;
}
catch(Exception Ex)
{
//don't care about exceptions
Ex.printStackTrace();
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
我认为这种方法很好,但我真的很想知道管理异常的最佳实践是什么(我应该在调用堆栈中一直冒出异常吗?).
总结关键问题:
跟进/编辑
感谢所有反馈,在网上找到了一些关于异常管理的优秀来源:
似乎异常管理是根据上下文而变化的事情之一.但最重要的是,人们应该如何管理系统中的异常.
另外注意通过过多的尝试/捕获代码腐烂或不给予例外它的尊重(例外是警告系统,还需要警告什么?).
此外,这是m3rLinEz的一个很好的选择评论.
我倾向于同意Anders Hejlsberg和你的看法,大多数来电者只关心操作是否成功.
从这个评论中,它提出了一些在处理异常时要考虑的问题:
处理方法中发生的已知错误有哪些好方法?
我们以用户注册方法为例.当用户注册时,SignUp( User user )会调用一个方法.可能会发生一些已知错误.
你可以抛出特定的例外:
public void SignUp( User user )
{
// Email already exists
throw new EmailExistsException();
}
Run Code Online (Sandbox Code Playgroud)
现在可以捕获特定的例外情况.
这在我看来是不好的,因为异常被用于流量控制.
你可以返回一个布尔声明,如果它成功并传入一个错误消息,如果发生错误将被设置:
public bool SignUp( User user, out/ref string errorMessage )
{
// Email already exists
errorMessage = "Email already exists.";
return false;
}
Run Code Online (Sandbox Code Playgroud)
我出于某些原因不喜欢这个.
让我们说一下在方法中设置的实际消息是坏的.
您可以使用错误代码:
public enum Errors
{
Successful = 0,
EmailExists,
UsernameExists,
Etc
}
public Errors SignUp( User user )
{
// Email already exists
return …Run Code Online (Sandbox Code Playgroud)