以下静态辅助函数是否为反模式?
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。
答案 0 :(得分:2)
是的,捕获RuntimeException并在应用程序内部创建一个新路径是不允许的,因为捕获RuntimeException是完全错误的,因为抛出它的主要原因主要是处理你的资源。例如系统和其他与您的代码无关的事情。
相反,您应该终止指定代码的流程并分别通知用户。
但,在某些情况下,所描绘的反模式可能听起来更好,因此,您最好通过以下主题,以便根据您的问题开发更好的主意,在任何时候:
以上只是单词,这意味着最终设计(即遵循语言规范/创建反模式)取决于你,但你应该始终牢记(并决定/根据情况采取相应行动)一层的运行时异常是另一层检查(并采取行动)异常。