首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异常处理

异常处理
EN

Stack Overflow用户
提问于 2010-10-17 04:25:33
回答 2查看 641关注 0票数 3
代码语言:javascript
复制
catch (Exception ex)
{
    DBGlobals.Error("OHMjson.Graph.saveLastGraphName - Error: " + ex.getMessage());
    msg = "Unable to save data";
    status = false;
}

如果我遇到一个错误,这段代码会抛出一个状态为false。

相反,我应该抛出新的异常。这条路对吗?如何以更好的方式处理异常。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-17 04:30:45

首先,不要抓到Exception。捕获特定的子类。

其次,是的,这可能是一个底层的IOException,就像这样,应该包装在一个特定于应用程序的异常中。你可以这样做,例如:

代码语言:javascript
复制
final class DBGlobalsException extends Exception
{
   Field somethingDBGlobalsSpecific;

   //where this is shorthand for chained constructors that look like Exception
   DBGlobalsException(String message, Throwable cause)
   {
     super(message,cause);
   }

   // elaborate your exception with whatever error state you want to propagate outwards
   void setField(Field ...) {}
}

然后你就可以

代码语言:javascript
复制
catch (IOException ex) {
   DBGlobals.Error("OHMjson.Graph.saveLastGraphName - Error: " + ex.getMessage());
   msg = "Unable to save data";
   status = false;
   DBGlobalsException dbe = new DBGlobalsException(msg,ex);
   dbe.setField(status /* or whatever */);
   throw dbe;
}

另请参阅:Throwing ExceptionThrowing new and old exceptionsRolling your own。这只是一小部分,有一堆关于异常处理、链接等的优秀问答。在WikiBooks上概述了一些有用的最佳实践。

也请阅读Oded's answer并仔细思考……您的异常应该封装任何状态(错误代码、标志等)。是外部代码从条件中恢复所必需的--或者它应该是一个不可恢复的条件(请参阅RuntimeException)。

最后,介绍规范有效的Java参考:Item 43: Throw Exceptions Appropriate to the Abstraction

票数 2
EN

Stack Overflow用户

发布于 2010-10-17 04:30:27

更喜欢抛出异常而不是返回错误代码/状态。

返回错误代码意味着调用者应该始终记得检查它。抛出异常允许调用代码决定要做什么(通常情况下,决定越高,做出的决定越好)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3950629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档