对于可以产生错误和警告的方法,Java是否有良好的设计模式,这两种方法都应该传递给方法调用者(最终是UI)?我现在正在做的只是将错误,警告和结果作为单个对象返回,但这会导致错综复杂且容易出错的C风格错误处理,因为我失去了异常传播的便利性。
如果我不需要处理警告,我会使用异常,但我必须处理警告,抛出异常会有两个缺点:
一个。错误和警告不会被同质地传达(不是很大)
B中。我将不得不在所有客户端代码中处理两个不同代码路径中的警告(抛出异常的情况,以及函数正常返回的情况)
答案 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
列表的值对象,该列表包含消息和严重性。