【问题标题】:How to write Chained Exception Java classes如何编写链式异常 Java 类
【发布时间】:2015-09-17 17:42:47
【问题描述】:

具体来说,应该重写哪些构造函数以将异常限定为chainable

Throwable(Throwable cause)Throwable(String message, Throwable cause),还是两者兼有?

资源:

http://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html https://docs.oracle.com/javase/tutorial/essential/exceptions/chained.html


以下示例展示了如何使用链式异常:

try {

} catch (IOException e) {
    throw new SampleException("Other IOException", e);
}

【问题讨论】:

  • 伙计们,你们很快……更新了主题并为问题添加了一些上下文。

标签: java exception


【解决方案1】:

不清楚这里的“可链接”是什么意思。

但是,鉴于您提供的链接,我假设您的意思是 Throwable 有另一个 Throwable 作为原因。

在这种情况下,您别无选择,只能使用适当的构造函数;例如:

public class Root
    extends Exception
{
    public Root(final String msg, final Throwable cause)
    {
        super(msg, cause);
    }
}

另一种鲜为人知的解决方案是从 Java 7 开始就存在,它是“抑制”异常。见this link

这意味着您应该首先定义“链式异常”的含义。就其性质而言,一个例外几乎是“最终的”。将异常嵌入到其他异常中的需求很少见,但并非闻所未闻(至于被抑制的异常,请参见 here 的示例)

所以,首先要定义您的用例!

【讨论】:

  • 抑制异常非常酷。谢谢。因此,似乎我们可以使用这两个构造函数中的任何一个来获取chained exceptions,以“getCause() 返回导致当前异常的异常,initCause() 设置当前异常的原因。”
  • 不完全。如果您抑制异常,则不会将其视为“原因”。在这一点上,我相信最好的方法是进行试验,看看什么最适合你。就个人而言,由于抑制异常的出现,我很少看到需要initCause(),但你的里程可能会有所不同;)
猜你喜欢
  • 2014-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-17
相关资源
最近更新 更多