通常のjavaのソースコードでは、例外を発生させると同時にthrowしていると思います。
しかし、例外クラスもクラスの一つであり、newするとオブジェクトが生成されますので、先に例外クラスのオブジェクトを生成し、オブジェクトとしてやりとりした後、後でthrowすることが可能です。
以下、サンプルコードです。
FileNotFoundExceptionを生成した後にIOExceptionを生成・上書きし、IOExceptionを返すというサンプルコードです。
【サンプルコード】
・ExceptionTest.java
import java.io.FileNotFoundException;
import java.io.IOException;
public class ExceptionTest {
public static void main(String[] args) {
Exception ex = null;
ex = exceptionMaker();
try {
throw ex;
} catch (FileNotFoundException e1) {
System.out.println("FileNotFoundException");
} catch (IOException e2) {
System.out.println("IOException");
} catch (Exception e3) {
System.out.println("Exception");
}
}
static Exception exceptionMaker() {
Exception ex = null;
ex = new FileNotFoundException();
ex = new IOException();
return ex;
}
}
【実行結果】
IOException
いかがでしたでしょうか。
今回の記事では、先に例外クラスのオブジェクトを生成して後でthrowできることを確認しました。
しかし、通常、後でthrowするようなソースコードは書かないと思います。
少なくとも、今回のような例では、フラグ変数でどの例外を返すかの情報を保持し、後で例外オブジェクトを1回だけ生成するべきです(オブジェクトの生成にはリソースが必要なため)。
実務の中で後からthrowしたいという話が出たので、そもそもできるのかというのを確認したのですが、できたとしてもトリッキーな印象は否めないので、このようなソースコードを書くことには慎重になった方が良いと思います。


コメント