1

重複の可能性:
スローまたは try-catch

API を作成していて、特定のシナリオで例外を発生させることができるようなコードを作成したいと考えています。次のように例外クラスを作成しました:-

public class InvalidSeverityException extends Exception {
    private static final long serialVersionUID = 1L;
    public InvalidSeverityException() {
        // TODO Auto-generated constructor stub
    }
}

コードベースでは、コードを呼び出すために次のものを持っています:-

throw new InvalidSeverityException();

ただし、Eclipse は、ブロックthrows内で使用するか、囲むことを提案しています。try ... catchこのエラーをキャッチするべきではなく、API を使用する開発者はコードを で囲む必要があると思いますtry...catch

それは理にかなっていますか?私は何か間違ったことをしていますか?

4

4 に答える 4

4

Java で例外を処理する場合、チェック済み例外非チェック済み例外の概念を理解する必要があります。

あなたの場合、現在、チェックされた例外を定義していますが、チェックされていない例外が必要な場合があります。

それぞれのタイプについて簡単に説明します。

チェック済み例外

この例外は、それらを発生させる (または発生させる 1 つのメソッドを呼び出す) メソッドのシグネチャの一部である必要があります。または、try catchブロックでそれらをキャッチして問題に対処する必要があります。通常、チェック例外は、エラーに対して実行できることがある場合、およびそのようなエラーが発生する可能性があり、処理する必要があることを開発者に認識させたい場合に使用されます。

Javajava.lang.Exceptionではチェック済み例外であり、そのすべてのサブクラスもチェックされます。

未チェックの例外

一方、この例外はメソッド シグネチャの一部にする必要はなく、try catchブロックで new をスローするメソッドをラップする必要もありません。コール スタックのどこかにtry catchそれを処理する場所があることが予想されます。それ以外の場合は、JVM に到達するとスタック トレースが適切にダンプされます。

Javajava.lang.RuntimeExceptionではチェックされない例外であり、そのすべてのサブクラスもそうです。

私の意見

API を定義している場合、checked exceptionsを使用することをお勧めします。これは主に、API を使用している開発者に、そのような例外が発生する可能性があることを明示的に通知するためです (したがって、彼らは好きなように例外を処理できます)。

于 2012-12-07T16:40:36.770 に答える
1

それでは、Eclipseによる最初の提案に従い、例外をスローするようにメソッドを設定してください。

public void myMethod() throws InvalidSeverityException {
    //throw it somewhere in here so that other 
    //developer can catch it while calling your method
}
于 2012-12-07T16:35:01.947 に答える
1

throw new InvalidSeverityException();スローを定義する必要があるメソッドInvalidSeverityException

例:

  void yourMethod() throws InvalidSeverityException
    {
    ........//Some code
    throw new InvalidSeverityException();

    }
于 2012-12-07T16:33:23.197 に答える
1

あなたは正しいです、あなたはそれを捕まえるべきではありません。eclipse で提案されてthrowsいるように、メソッドがその例外をスローする可能性があることを開発者が認識し、それをキャッチできるように使用する必要があります。

.... method() throws YourException{
于 2012-12-07T16:34:36.837 に答える