0

' remote ' 例外のいずれかを検討してください:
javax.jms.JMSExceptionまたは両方とも、詳細またはリンクされた例外プロパティjava.rmi.RemoteException
を持つために、例外連鎖の一般的なパターンから除外します。 この例外のいずれかを含むスタック トレースを出力すると、トリミングされたスタック トレースが得られます。完全なスタック トレースを取得するには、タンバリンでさらに踊る必要があります。

リモート例外がこのように設計される 理由は何ですか?

編集:

Java 1.6.0_26 のソースを閲覧しています。の2 つの引数コンストラクタpublic RemoteException(String s, Throwable cause)を見てくださいjava.rmi.RemoteException。次のコードが表示されますinitCause(null); // Disallow subsequent initCause。これは、Java SE 6 でそれを行うための意図的な決定のようです。
しかし、一般的な慣行 によれば、例外チェーンinitCause()を構築することは壮大な目的です! ソースは覚えていませんが、カスタム例外を作成するベスト プラクティスについては自信があります 。1.スーパー クラスのすべてのコンストラクターを公開します。これは、スーパー コンストラクターを呼び出すことで簡単に実現できます。


Throwable.initCause()

ありがとう。

4

2 に答える 2

1

Javaを更新する時が来たと思います:)

リリース 1.4 の時点で、この例外は、汎用の例外チェーン メカニズムに準拠するように改良されています。構築時に提供され、パブリック詳細フィールドを介してアクセスされる可能性がある「ラップされたリモート例外」は、原因として知られるようになり、Throwable.getCause() メソッドおよび前述の「レガシー フィールド」を介してアクセスされる可能性があります。

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

編集:

あなたの質問にも答えてください。それは悪い設計上の決定であり、1.4 で修正されました。

于 2012-07-02T23:50:04.190 に答える
0

あなたの質問は誤った前提に基づいています。Throwable上からのすべての例外にはgetCause()メソッドがあります。

于 2012-07-02T23:43:10.063 に答える