-2

一部のコードをリファクタリングしているときに、例外処理に変更を加えるように求められ、いくつかの catch 句を変更して、try ブロックで可能な限り具体的な例外を取得しました。しかし、私はこのスニペットに出くわしました:

try {
        if (flagYear) {
            if (Day[0] == Month[0]) {
                if (Day[1] != null) {
                    Month = Month[0];
                    Day = Day[1];
                } else {
                    Month = Month[1];
                    Day = Day[0];
                }
            } else {
                Month = Month[0];
                Day = Day[0];
            }
        } else {
            if (Day[0] == Month[0]) {
                if (Month[1] != null) {
                    Month = Month[1];
                    Day = Day[0];
                } else {
                    Month = Month[0];
                    Day = Day[1];
                }
            } else {
                Month = Month[0];
                Day = Day[0];
            }
        }
    } catch (RuntimeException e) {
        throw new ExampleException();
    }

変数は次のように宣言されます。

Integer[] Day = new Integer[2];
Integer[] Month = new Integer[2];

Integer クラスの javadoc は NumberFormatException のみを参照します。

問題は次のとおりです。ブロック内のすべての例外を単純な整数比較と属性でキャッチできる最も具体的な例外は何ですか?

4

3 に答える 3

3

NumberFormatException は、文字列を整数に解析しようとしたときにのみ発生します

このコードの唯一のリスクは、Integer実際には月 (13,14,15) または日 (32,33,34...) を表さない を持つことです。

この場合、たとえば、IllegalArgumentException

于 2013-05-27T17:25:20.277 に答える
2

実行時例外をキャッチするのはなぜですか? これが議論の問題であることは承知していますが、私にそれをしなければならないということは、不適切な取り扱いを意味します。単純なサニティ チェックを行うと、実行時のすべての例外を 1 回のキャッチで取得する手間を省くことができます :/

于 2013-05-27T17:29:49.507 に答える