java - 我们可以在java中用它自己的异常来包装异常吗

标签 java exception

我可以创建一个异常吗

A a = new A (new B ( new A ) );

其中AB是两种不同类型的异常。

我知道 Java 可以做到这一点,但是这样做正确吗?

编辑:我正在编写异常类型的重试,因此我正在检查异常的 getCause。当 getCause 为 null 或 getCause 等于自身时我会中断,当 getCause 等于迄今为止看到的任何异常时我是否也应该中断

最佳答案

AException a = new AException (new BException ( new AException ) );

这是合法的。

<小时/>

您还可以使用 initCause(Throwable) 方法直接初始化原因。

如果你试图让异常成为其自身的原因;例如

 AException a = new AException();
 a.initCause(a);

您将得到一个IllegalArgumentException(“不允许 self 因果关系”)。 (感谢 Joachim Sauer 指出了这一点。)

尽管 JVM 不会阻止您创建间接循环,但这仍然是一个非常糟糕的主意

  • 这是对 Throwable API 的滥用。直接或间接导致的异常事件在逻辑上是没有意义的。

  • 可能有代码假设异常的“原因”链没有任何循环。如果此类代码遇到具有原因循环的病态异常,则可能会以令人讨厌的方式失败。

请注意,当前一代(Java 7)printStackTrace() 检测并处理“原因”循环,但早期版本没有:

关于java - 我们可以在java中用它自己的异常来包装异常吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12701789/

相关文章:

java - document.<applet name>.isAlive() 在某些浏览器中失败

java - 为什么 ByteArrayOutputStream.close() 抛出 IOException?

java - 如何强制在每个测试方法中运行静态 block ?

Java 通过抛出异常进行流程控制

c++ - 尝试抛出异常处理

java - 通过第二个元素统一数组的 Arraylist

JAVA - 如何从Annotation获取注解?

Java Spring @ExceptionHandler 未正确处理错误

java - 将 "throw new exception"提取到方法中会导致编译错误

ios - 在对象初始化时为错误的参数值Objective-C引发错误