まず、捕まえないでくださいException
。特定のサブクラスをキャッチします。
IOException
2 つ目は、これがどのように見えるかの基礎となるを、アプリ固有の例外でラップする必要がある可能性があります。たとえば、次のようにすることができます。
final class DBGlobalsException extends Exception
{
Field somethingDBGlobalsSpecific;
//where this is shorthand for chained constructors that look like Exception
DBGlobalsException(String message, Throwable cause)
{
super(message,cause);
}
// elaborate your exception with whatever error state you want to propagate outwards
void setField(Field ...) {}
}
そして、あなたはそうすることができました
catch (IOException ex) {
DBGlobals.Error("OHMjson.Graph.saveLastGraphName - Error: " + ex.getMessage());
msg = "Unable to save data";
status = false;
DBGlobalsException dbe = new DBGlobalsException(msg,ex);
dbe.setField(status /* or whatever */);
throw dbe;
}
参照:スローException
する、 新旧の例外をスローする 、独自のローリング. これはほんの一部です。例外処理、連鎖などに関する優れた SO Q +A がたくさんあります。
また、 Oded の回答を読んでよく考えてみてください...例外は、外部コードが状態から回復するために必要なステータス (エラー コード、フラグなど) をカプセル化する必要があります。または、回復不能な状態である必要があります (参照RuntimeException
)。
最後に、正規の効果的な Java リファレンス: Item 43: Throw Exceptions Appropriate to the Abstraction .