【问题标题】:Difference Error codes or Exceptions [duplicate]差异错误代码或异常[重复]
【发布时间】:2012-12-07 10:50:27
【问题描述】:

可能重复:
Exceptions or error codes
When is it appropriate to use error codes?

我想知道何时应该使用 C 等语言中使用的错误代码以及何时使用异常。考虑以下示例,其中我们需要一个 getData() 函数,如果成功则返回数据字符串,否则返回错误消息。我们应该如何报告错误?作为异常或错误消息?

public int fo(arguments) {
    //some code
    String data = "";
    String errMsg = "";
    boolean rc = getData(arguments, data, errMsg);
    // do something based on the results of getData()
    // and report error messages in case of errors
}

您如何看待以下实现:

boolean getData(some arguments, String data, String errorMessage){
    {
        //check arguments for null pointers or invalid values and return error
        //message
        errorMessage = "Invalid Arguments";
        return false;
    }
    {
        //check for other errors
        errorMessage = "Some Error";
        return false;
    }
    // no error, return valid data
    data = "some valid data";
    return true;
}

据我所知,我们不应该使用异常来进行流量控制。您能否评论一下错误代码和异常的正确使用?

【问题讨论】:

  • errorMessage = "Invalid Arguments"; return false; ==> throw new IllegalArgumentException("Invalid argument: data was null")(例如)是人们在这种情况下所期望的。
  • 想更正标题中的错字,但对该标题有疑问already exists
  • 出于某种原因,有些人认为这里不应该使用异常。我不明白为什么不。如果您使用异常,您可以让您的方法返回数据 OR 抛出包含错误消息的异常。您当前的方法(尝试返回 3 条数据)将无法按照您的方式工作。

标签: java error-handling


【解决方案1】:

首先,您的示例不起作用,因为在 Java 中参数是按值传递的。因此,即使您更改了 errorMessage 的值,该更改在方法之外也不会可见。

但是假设您解决了这个问题并正确返回了错误代码,那么问题就归结为您要处理错误的位置。

异常在调用堆栈上自动“冒泡”,直到找到处理该特定类型异常的catch 块。这使您有机会在更高级别上处理它们,而如果您返回错误代码,则必须立即在直接调用者中处理该错误代码(然后可能为其调用者设置另一个错误代码等on,当你看到这个模式时,你可以确定你应该抛出异常)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-04
    • 1970-01-01
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    • 2010-09-20
    • 1970-01-01
    相关资源
    最近更新 更多