1

例外タイプの正確なタイプは(実際にはプログラミング言語で)どれほど重要ですか? 本の章の階層があり、メソッドを使用して章にアクセスするとします。1つは次のとおりです。

public void chapterSearch(int chapter) {
    try {
    chapterString = this.hierarchy.get(chapter).getText();
    } catch(IndexOutOfBoundsException e) {
    throw new....
        }
}

2番目はこれです:

public void chapterSearch(String chapterString) {
    for(int i = 0; i < this.hierarchy.size(); i++) {
    if(chapterString.equals(this.hierarchy.get(i).getText())) {
        break;
    } else if(i == this.hierarchy.size() - 1) {
        throw new IllegalArgumentException...
        }
    }
}

最初のメソッドでは、 new をスローすることは明らかIndexOutOfBoundsExceptionです。しかし、IllegalArgumentException使用できるものがあります。これは、javadoc によると

メソッドに不正または不適切な引数が渡されたことを示すためにスローされます。

これも状況に非常に適しているようです。つまり、そのような章番号がない場所に非常に大きな章番号を渡すことは、私にはまったく不適切に思えます。または、コメントのように、独自の新しい例外をスローできますChapterNotFoundException。しかし、これは面倒な場合があり、この Exception を複数回使用することはないかもしれません。その場合、既存の Exception を使用する方が適切であると思われるかもしれません。

しかし、一般的に、このケースIndexOutOfBoundsExceptionが最も適切なままである場合、またはあなたが好む場合でもChapterNotFoundException、例外タイプの選択は一般的にどの程度重要ですか?

独自の Exception タイプを作成することは、それを頻繁に使用すると非常に理にかなっていると思いますが、そうでない場合はどうなりますか?

編集:以下の回答も非常に優れていますが、関連する優れた回答はこちらです。

4

2 に答える 2

3

例外をどのように処理したいかによると思います。プログラムを失敗させて、後でログを掘り下げたい場合は、私は投票します

throw new IllegalArgumentException("Unexpected chapter: \"" + chapterString + "\"");

例外をキャッチして処理したい場合は、を作成ChapterNotFoundExceptionする方が理にかなっています。ただし、コードでこれを処理する場合は、チャプターが存在するかどうかをチェックするブールメソッドの作成を検討し、例外の処理をまったく行わないようにする必要があります。

于 2013-02-18T08:21:32.990 に答える
2

適切なコーディング ガイドラインでは、(可能な限り) 正確な例外をキャプチャすることが非常に重要です。

以下の理由

  1. 例外を処理し、例外が発生した場合に修復作業を行う必要がある場合があります。例外が異なる場合は、行う修復作業が異なる可能性があり、それを処理する一般的な方法はありません。したがって、これらの状況では、例外の適切な catch ブロックで特定のケースを処理できます。
  2. 2番目の理由は、誰かがあなたのメソッドを呼び出そうとしている場合、スローされる可能性のある例外のセットを彼らが知っていれば、あなたのメソッドを再利用しようとしている第3の部分に役立ちます. 単純に "Exception" または "Throwable" をスローすると、空の下で一般的になりすぎて処理できなくなります。

一言で言えば、詮索するよりも要点に答える方が常に良いです。

于 2013-02-18T08:14:49.133 に答える