用于处理错误和警告的模式

时间:2014-02-21 03:15:05

标签: java

对于可以产生错误和警告的方法,Java是否有良好的设计模式,这两种方法都应该传递给方法调用者(最终是UI)?我现在正在做的只是将错误,警告和结果作为单个对象返回,但这会导致错综复杂且容易出错的C风格错误处理,因为我失去了异常传播的便利性。

如果我不需要处理警告,我会使用异常,但我必须处理警告,抛出异常会有两个缺点:

一个。错误和警告不会被同质地传达(不是很大)

B中。我将不得不在所有客户端代码中处理两个不同代码路径中的警告(抛出异常的情况,以及函数正常返回的情况)

2 个答案:

答案 0 :(得分:0)

您可以声明自定义异常,使用throw new MyException();抛出它们并像这样捕获它们:

class MyException extends Exception {
    public MyException() {}
    public MyException(String message) { super(message); }
}

void foo() throws MyException {
    /* ... */
    throw new MyException("MyString");
}

void bar() {
    try {
        foo();
    } catch (MyException me) {
        /* Error handling here */
    }
}

编辑: 或者,您可以在类中声明一个类似errno的变量,并在每次函数调用后检查它,或者将数组传递给函数,如下所示:

void foo() {
    int[] errors = {0, 0};
    bar(errors);
    if(errors[0] != 0) /* error handling */
    if(errors[1] != 0) /* warning handling */
}

void bar(int[] errors) {
    /* ... */
    errors[0] = 42; /* error code */
    errors[1] = 1337; /* warning code */;
}

答案 1 :(得分:0)

首先,使用程序流的异常是一种反模式 - 不要这样做。例外是针对特殊情况,而不是针对例行情况。

我将返回一个包含Problem列表的值对象,该列表包含消息和严重性。