考虑任何“远程”异常:
javax.jms.JMSException
或java.rmi.RemoteException
两者都通过具有详细或链接异常属性而从异常链接的常见模式中排除。
当您打印包含此异常之一的堆栈跟踪时,您将获得修剪的堆栈跟踪。要获得完整的堆栈跟踪,您需要额外的手鼓跳舞。
以这种方式设计 远程异常的原因是什么?
编辑:
我正在浏览 java 1.6.0_26 的源代码。查看 的两个参数构造函数public RemoteException(String s, Throwable cause)
。java.rmi.RemoteException
你可以看到下一个代码initCause(null); // Disallow subsequent initCause
。这似乎是 Java SE 6 中有意做出的决定。
但是按照惯例,构建 异常链initCause()
有它的宏伟目的!
我不记得来源,但我对创建自定义异常的最佳实践充满信心:
1. 公开超类
2 的所有构造函数。不要制动异常链(换句话说,调用)。这可以通过调用超级构造函数来简单地实现。Throwable.initCause()
谢谢。