0

次のコード例があります。

 private boolean openThroughCommPort(IProgressMonitor monitor, int portNum)
       throws InterruptedException, PortInUseException, IOException,
       UnsupportedCommOperationException, TooManyListenersException,
       UnsupportedVehicleException, InnerCanceledException {
        ...
       }

それが良い方法かどうかはわかりません-メソッドシグネチャで多くの例外をスローします。

この場合のベスト プラクティスを教えていただけないでしょうか。

4

4 に答える 4

6

まず第一に、メソッドが多くの例外をスローする場合、それはメソッドがあまりにも多くのことを行っていることを意味します。作業を別々のメソッドに分散することを考える必要があります。

第 2 に、呼び出し元 (呼び出し元が同じ抽象化レベルにある) が、どの例外が発生したかを正確に把握し、それに対して特定のアクションを実行することが重要である場合は、個々の例外をスローし、それをラップしない方が理にかなっています。また、@Jon Skeetが指摘したことは、効果的なドキュメントの可能性も低下させるということです。

呼び出し元が正確な原因を知る必要がなく、抽象化レベルが異なる場合は、呼び出し元の抽象化レベルに沿った独自のカスタム例外で例外をラップするのが理にかなっています。

于 2013-10-16T07:46:37.337 に答える
0

一般化するよりも、特定の例外を処理する方が常に優れています。非常に多くの例外をスローしても問題はありません。これは、文書化にも役立ちます。

于 2013-10-16T07:45:03.470 に答える
0

をラップしたり飲み込んだりしないInterruptedExceptionでください。アプリケーションがスレッド化されたコンテキストで正しく動作しません。参照用のリンクがいくつかありますが、必ず適切な方法で処理してください:
http://www.ibm.com/developerworks/java/library/j-jtp05236/
Java Thread Sleep and Interrupted Exception

呼び出しメソッドは、例外を処理するか、フローアップさせる必要があります。メソッドの Javadoc に簡単な説明を追加できます。

于 2013-10-16T07:47:52.983 に答える
0

独自のラッパー例外を作成し、メソッドで try/catch を使用することをお勧めします。Narendra Pathai は、最初にスローされた例外に基づいて、呼び出し元が誰を続行するかを決定する必要がない場合にのみ、それを行うべきであるという完全に正しいです。

次のように例外をラップできます。

try{ 
   //do something 
} catch(Exception e){ 
   throw new WrapperException(e);
}
于 2013-10-16T07:39:55.717 に答える