引数のないコンストラクタが不可能な例外をスローするか、空のキャッチブロックを持つ方が良いでしょうか?私はこのようなクラスを持っているとしましょう。 Javaの引数のないコンストラクタ:不可能な例外をスローするか、空のキャッチブロックがありますか?
public class Foo {
private int num;
private String numString;
public Foo() throws NumberFormatException {
setNum("1");
}
public void setNum(String s) throws NumberFormatException {
// In reality, complex code goes here
num = Integer.parseInt(s);
numString = s;
}
}
コンパイラは、(何も起こりません)NumberFormatExceptionをスローするか、try/catchブロックを持つようにコンストラクタに強制します。しかし、空のキャッチブロックを作成するのは正しいでしょうか?それは通常悩まされますか?
public Foo() {
try {
setNum("1");
}
catch (NumberFormatException e) { }
}
fooがライブラリのクラスになりますし、他の人がそれを使用することに注意し、その引数なしのコンストラクタが不可能な例外をスロー持つことは混乱するだろうしてください。また、実際の例外はNumberFormatExceptionではなくカスタム例外であり、ライブラリのユーザにとってはもっと混乱させる可能性があり、必要でないときにカスタム例外を読み上げなければならないと感じるかもしれないことにも注意してください。
+1 - "これは決して起こらないはずです"というより具体的な意味を持つ "AssertionError"を投げることを好む。 –
@StephenCこの問題は、 'AssertionError'が' Throwable cause'引数を取ることができないということです。つまり、最初の例外がどのようにスローされるのかを示すスタックトレースはありません。これは非常に有用なデバッグ情報です。特に投げられなかったと確信していた場合は特にそうです! – yshavit
私の実際の例外は、チェックされた例外で、RuntimeExceptionとして機能しました。ありがとう! – anomal