2

我有一个关于 java 中的错误处理的查询。假设一个库有几个错误代码。对于各种错误,有一个例外并在其中包含一个错误代码枚举是一种好习惯吗?

更新:在异常中包含错误代码是一种好习惯吗?

4

4 回答 4

4

错误错误代码是两个不同的东西。一个定义发生了什么,另一个确定错误的特定来源。

最好的例子是与数据库相关的异常,其中 SQL 异常包括定义导致它的错误提示的代码。

通过枚举或字段使该代码可访问是一项设计决策。如果你有一个异常要抛出并且你添加一个错误代码,它可以被认为是一个两步异常处理:

  1. 捕获确定错误上下文的异常
    • 安全
    • 数据库
    • 加工
    • 解析
    • 无效操作
  2. 检查异常代码以确定来源
    • 用户没有足够的权限来做他试图做的事情
    • 数据库连接错误a
    • 查询相关问题
    • 系统当前过载
    • 未找到某个操作的管理员

一旦确定了源(代码)并且知道了它的上下文(异常),您就可以采取相应的行动。恕我直言,层次结构是一种很好的方法,可以在需要时使用代码进行扩展。请记住,如果您为了表示源而将异常子类化 10 次,则会对可维护性和复杂性产生影响。

于 2013-03-06T16:20:31.960 回答
3

并不真地。您应该使用不同的异常类型,一种用于每种错误类型(在合理的范围内,不要创建数百种不同的异常类型!)。

它允许您仅捕获您真正想要捕获的那些,而不是处理每个异常以发现发生了什么。

但是,请随意自定义异常消息,以阐明同一类型的多个异常中的错误来源。

这个简单的解释很清楚。

于 2013-03-06T16:18:36.463 回答
2

当前的实践是至少有一个基类 (IOException) 和子类,如 FileNotFoundException、UnsupportedEncodingException。在使用方面,可以使用 IOException 捕获所有内容。

这允许只处理 FileNotFound。

另一方面,如果有许多代码,例如 HTTP 响应代码,那么您只使用一个异常的方法是非常合理的。

于 2013-03-06T16:20:23.720 回答
2

如果错误代码太多,并且您不希望用户捕获并恢复,则可以使用一种嵌入整数错误代码的异常类型。如果在编译时无法确定错误代码集,那么您实际上别无选择。

于 2013-03-06T16:20:56.790 回答