Java 从辅助函数引发异常

Java 从辅助函数引发异常,java,Java,以下静态辅助函数是否为反模式 public class CustomException extends RuntimeException { // ... public static void rethrow(String s, Exception e) throws CustomException { throw new CustomException(s + "\n" + "Exception: " + e.getMessage()); } } 在电

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

public class CustomException extends RuntimeException {
    // ...
    public static void rethrow(String s, Exception e) throws CustomException {
        throw new CustomException(s + "\n" + "Exception: " + e.getMessage());
    }
}
在电视上或其他地方看不到它

一个直接的问题是静态警告被破坏,例如我不能再执行以下操作:

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创建一个构造函数,将字符串和异常作为参数。

是的,不允许捕获RuntimeException并在应用程序内创建新路径,因为捕获RuntimeException是完全错误的,它被抛出的主要原因是与系统的资源等相关的,例如与代码无关的其他东西

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

但是,在某些情况下,所描述的反模式可能听起来更好,因此,您最好在任何给定的时间,根据您的问题,通过以下线索,以形成更好的想法:


上述内容仅限于文字,这意味着最终的设计(即遵循语言规范/创建反模式)取决于您,但您应该始终记住的是(并根据具体情况决定/采取相应行动)一层的运行时异常是另一层的检查(并采取行动)异常

是的,您将丢失原始异常中的stacktrace信息。很酷,感谢您的链接和想法。在第一个实例中,我需要的是构造函数,而不是帮助函数,即:
publiccustomexceptionstring s,Exception e{super(s+“\n”+”Exception:+e.getMessage();}