gpt4 book ai didi

java - 从 'remote' 异常中的通用异常链工具中排除

转载 作者:行者123 更新时间:2023-12-01 15:18:35 27 4
gpt4 key购买 nike

考虑任何“远程”异常:
javax.jms.JMSExceptionjava.rmi.RemoteException
两者都通过具有详细信息链接异常属性来排除异常链接的常见模式。
当您打印包含此异常之一的堆栈跟踪时,您将得到修剪的堆栈跟踪。要获得完整堆栈跟踪,您需要额外用铃鼓跳舞。

远程异常要这样设计的原因是什么?

编辑:

我正在浏览 java 1.6.0_26 的源代码。查看java.rmi.RemoteException 的两个参数构造函数public RemoteException(String s, Throwable Cause)。你可以看到下一个代码 initCause(null);//禁止后续的 initCause。这似乎是 Java SE 6 有意做出的决定。
但是根据common practice initCause() 的宏伟目标是构建异常链!
我不记得来源,但我对创建自定义异常的最佳实践充满信心:
1. 暴露父类(super class)的所有构造函数
2. 不要中断异常链(换句话说,调用Throwable.initCause())。这可以通过调用 super 构造函数来简单地实现。

谢谢。

最佳答案

猜猜是时候更新你的java了:)

As of release 1.4, this exception has been retrofitted to conform to the general purpose exception-chaining mechanism. The "wrapped remote exception" that may be provided at construction time and accessed via the public detail field is now known as the cause, and may be accessed via the Throwable.getCause() method, as well as the aforementioned "legacy field."

http://docs.oracle.com/javase/1.5.0/docs/api/java/rmi/RemoteException.html

编辑:

同时回答你的问题:这是一个糟糕的设计决策,在 1.4 中得到了纠正

关于java - 从 'remote' 异常中的通用异常链工具中排除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11292216/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com