从辅助函数中抛出异常

时间:2016-01-20 18:09:09

标签: java

以下静态辅助函数是否为反模式?

public class CustomException extends RuntimeException {
    // ...
    public static void rethrow(String s, Exception e) throws CustomException {
        throw new CustomException(s + "\n" + "Exception: " + e.getMessage());
    }
}

无法在http://javapeanuts.blogspot.com/2012/02/exception-management-antipatterns.html或其他地方看到它。

一个直接的问题是静态警告被破坏,例如我不能再做以下事了:

final Blah blah = null;
try {
    blah = foo();
}
catch (Exception e) {
    CustomException.rethrow("Couldn't blah", e);
}
bar = blah.bar(); // ERROR: Variable 'blah' might not have been initialized.
嗯,我想我解决了。 :-)我应该为CustomException创建一个构造函数,它将String和Exception作为args。

1 个答案:

答案 0 :(得分:2)

是的,捕获RuntimeException并在应用程序内部创建一个新路径是不允许的,因为捕获RuntimeException是完全错误的,因为抛出它的主要原因主要是处理你的资源。例如系统和其他与您的代码无关的事情。

相反,您应该终止指定代码的流程并分别通知用户。

,在某些情况下,所描绘的反模式可能听起来更好,因此,您最好通过以下主题,以便根据您的问题开发更好的主意,在任何时候:

以上只是单词,这意味着最终设计(即遵循语言规范/创建反模式)取决于你,但你应该始终牢记(并决定/根据情况采取相应行动)一层的运行时异常是另一层检查(并采取行动)异常