考虑任意的“远程”例外:
javax.jms.JMSException
或java.rmi.RemoteException
既从异常链通过的共用图案排除具有细节或联异常属性。
当你打印堆栈轨迹包含这些例外之一时,你会得到修剪堆栈轨迹。要获得完整堆栈跟踪,您需要额外跳舞与手鼓。排除在“远程”例外链设施
是什么原因远程例外设计这种方式?
编辑:
我浏览的Java 1.6.0_26来源。看看java.rmi.RemoteException
的两个参数构造函数public RemoteException(String s, Throwable cause)
。你可以看到下面的代码initCause(null); // Disallow subsequent initCause
。这似乎是Java SE 6中有意识的决定。
但是按照common practiceinitCause()
它的宏大目的是构造异常链条!
我不记得来源,但我相信有关创建自定义异常的最佳实践:
1.公开所有超类
2的构造并不制动例外连锁(调用Throwable.initCause()
在也就是说)。这可以简单地通过调用超级构造函数来实现。
谢谢。
更正,但1.4之前它没有填充RemoteException中的真正原因。 –
@GergelySzilagyi同意但为什么'但'?这只是强化了答案。 (a)这些例外类别的行为并非唯一; (b)在1.4之前,这些类别中甚至没有这种行为。在这两种情况下,问题都是基于错误的前提。 – EJP