1

その中に別のメソッドxを呼び出すメソッドがyあり、例外をスローしますMyException。現時点xでは、例外を使用してメソッドを宣伝するための2つのオプションがありますMyException...のように

public void x() throws MyException {
// call to y
}

(このような句yで宣伝されているので...)throws

public void y() throws MyException {
// code
}

yまたは、メソッドの呼び出しをxtry catch ブロックでラップして処理しますか? このような..

public void x() {
 try {
   // call to y
 } catch (MyException e) {
   // handle exception
 } 
}

経験則は何ですか?

4

2 に答える 2

1

答えは非常に簡単です。

内部例外を処理できる場合は、それをキャッチして合理的なことを行う必要があります

対処できない場合は、次の 2 つの選択肢があります。

  1. 例外が実装固有の場合は、それをキャッチして、呼び出し元に受け入れられる例外をスローします (通常は実際の例外をラップします)。
  2. 例外が呼び出し元のドメインにある場合は、それをスローすると宣言し、呼び出し元に処理させます

各タイプの例を次に示します。

例 1: 対処:

public void deleteFile(String filename) {
    File file = new File(filename);
    try {
        file.delete();
    } catch (FileNotFoundException e) {
        // No big deal - it was already deleted
    }
}

例 2: ラッピング:

public void changePassword(String username, String password) throws UserUpdateException {
    try {
        // execute SQL to update the password
        // but storing the user in a DB is an imlementation choice
        // we could use a file on disk or a remote web service to store user info
    } catch (SQLException e) {
        throw new UserUpdateException(e);
    }
}

例 3: 何もしない:

public void insertIntoDatabase(Record record) throws SQLException {
    // execute SQL on the database
    // using a DB is implied - let the exception bubble up
}
于 2012-05-16T05:27:52.343 に答える
1

例外に関係なく、メソッドが呼び出し元との契約を維持できる場合、例外は処理できるものであり、おそらく処理する必要があります。

発信者が「do x」と言ったことに混乱し、「x」の「y」部分に内部的な問題があった場合、「x」は実際には完了していないため、例外 (またはMyException原因としてa を持つその他の例外)。

そして - 呼び出し元が例外を合理的に処理できるかどうか、またはプログラムを続行する理由があるかどうかを検討し、答えがどちらにもない場合は、それぞれaRuntimeExceptionまたはを使用することを検討してください。Error

とにかく、それは私が言うことです。

于 2012-05-16T05:00:18.490 に答える