2

特定の名前の例外をスローしたいのですが、そのような例外はサイド パッケージに既に存在します。

例えば。UnexpectedException_ java.rmirmi パッケージの機能は一切使用していませんが、例外の名前はまさに私が必要としているものです。

自分のコンテキストでその例外をスローするか、同じ名前で新しい例外を作成できます。どちらの方法が良いですか?

4

4 に答える 4

6

名前が正しいからといって、他のものが正しいというわけではありません。説明を見てください。たとえば、次のようになります。

リモート メソッド呼び出しのクライアントが呼び出しの結果として、リモート インターフェイスのメソッドの throws 句で宣言されたチェック済み例外の種類に含まれないチェック済み例外を受け取った場合、UnexpectedException がスローされます。

それは実際にあなたの例外が何を表現しようとしているのかを説明していますか? ないと思います。

あなたがクライアントだったと想像してみてください。RMI に関連するコードベースがないにもかかわらず、一体なぜ RMI に関係する何かをキャッチ(または宣言) しなければならないのか不思議に思うでしょう。奇妙さはコード全体に広がります。イク。

于 2013-03-13T15:53:30.807 に答える
3

例外の完全修飾名を見ると、java.rmiその名前の一部です。あなたのコードを読んで からの例外を期待するプログラマーを考えてみてくださいjava.rmi

特にこの例外を考慮すると、予期しないことは何ですか? 代わりにクラスに名前を付けてUnexpectedSomethingException、何が起こっているのかを明確にすることができます。

于 2013-03-13T15:54:09.903 に答える
1

@Jon Skeet@akaIDIOTはすでにかなり良い回答を提供しています。あなたの質問に関連するいくつかの例を追加します。

java.rmi.UnexpectedExceptionRMI とは関係のないメソッドから処理するのは奇妙で紛らわしいでしょう。

また、例外の主な目的は、自分では処理できなかった状況をクライアント コードで処理できるようにすることです。したがって、メソッドがスローされるという事実はjava.io.IOException、クライアント コードが予期しないファイルの入出力エラーを処理する責任を負う必要があることを意味します (ファイルのアクセス/存在、基本設定を再確認します)。メソッドのスローjava.rmi.UnexpectedExceptionにより、RMI 設定を確認するためのヒントがクライアント コードに与えられます

于 2013-03-13T15:57:53.553 に答える
0

希望する名前を共有しているという事実だけに基づいて、別の例外を再利用しないことを強くお勧めします。たとえば、RMIのコンテキスト外でjava.rmi.UnexpectedExceptionをスローすると、非常に混乱します。

例外をどのように使用するのか正確にはわかりませんが、名前だけに基づいて、同じ一般的な意味を持つjava.lang.RuntimeExceptionを使用できるように思えます。

したがって、私の推奨事項は次の順序になります。

  1. コードが処理する準備ができていないことが本当に予期しない予期される例外である場合は、RuntimeExceptionを使用します。これは、RuntimeExceptionがすでに提供しているよりも新しい機能が本当に必要ない場合に最も適切です。
  2. 独自のカスタムUnexpectedExceptionクラスを作成します。他のライブラリがすでに使用しているという理由だけで、特定のクラス名の使用を厳密に回避する理由は実際にはありません。これがパッケージのポイントの1つであり、同じ名前を明確にするための名前空間を提供することです。最新のIDEでは、心配する必要はありません。他の人は同意しないかもしれません-これは好みの問題です-しかし私は個人的にそれに関する問題を見ていません。それをしない技術的な理由は確かにありません。
于 2013-03-13T16:02:26.137 に答える