2

RuntimeExceptionをスローできることを宣言する別のメソッドまたはコンストラクターを内部で使用するメソッドまたはコンストラクターがあるとします。

// Example:
public MyClass(Object arg) {
    setVar(arg);
    // Not responsible for dealing with the exception
}

public void setVar(Object arg) throws MyRuntimeException {
    if(!isValidArg(arg))
        throw new MyRuntimeException("Got you, evil argument!");
    // Do something
}

この場合、たとえば必要な前提条件が満たされない場合、RuntimeExceptionがスローされます。

Q:引数が例外をスローする可能性がある場合、ラッピングメソッド/コンストラクターは同じ例外を宣言する必要がありますか?

4

4 に答える 4

3

それは実際にはコードが含まれているコンテキストに依存します。ライブラリのように自己完結型のものを作成したい場合は、コードをよりクリーンに使用するために、クラス内で例外をキャッチすることをお勧めします。

ただし、プロジェクトの一部としてコードを作成している場合は、意味的に意味がなくなるまで、「スロー例外を実行する」と言います。

于 2013-03-08T12:41:14.837 に答える
1

チェックされた例外の場合と同じように、ラッピングメソッド内で処理されることが想定されていない場合は宣言します。

とにかく、チェックされていない例外の場合でも、メソッドのそのようなヒントがあるのは良いことです。クライアントは、それを処理する必要があるかどうかを決定します。

于 2013-03-08T12:44:16.517 に答える
0

RuntimeExceptionsどちらのメソッドのスローシグネチャにも含める必要なしにスローされます。

ランタイム例外についてこれを読む必要があります

于 2013-03-08T12:39:59.393 に答える
0

いいえ、ランタイム例外はチェックされません。つまり、コンパイラはそれらを処理するように強制しません。しかし、優れたプログラミング手法として、次のような例外を処理できます。

public MyClass(Object arg) {
  try{
    setVar(arg);
}
catch(MyRuntimeException exp){
   // code if exception arises
}
于 2013-03-08T12:47:21.763 に答える