通常のjavaのソースコードでは、例外を発生させると同時にthrowしていると思います。
しかし、例外クラスもクラスの一つであり、newするとオブジェクトが生成されますので、先に例外クラスのオブジェクトを生成し、オブジェクトとしてやりとりした後、後でthrowすることが可能です。
以下、サンプルコードです。
FileNotFoundExceptionを生成した後にIOExceptionを生成・上書きし、IOExceptionを返すというサンプルコードです。
【サンプルコード】
・ExceptionTest.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
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; } } |
【実行結果】
1 |
IOException |
いかがでしたでしょうか。
今回の記事では、先に例外クラスのオブジェクトを生成して後でthrowできることを確認しました。
しかし、通常、後でthrowするようなソースコードは書かないと思います。
少なくとも、今回のような例では、フラグ変数でどの例外を返すかの情報を保持し、後で例外オブジェクトを1回だけ生成するべきです(オブジェクトの生成にはリソースが必要なため)。
実務の中で後からthrowしたいという話が出たので、そもそもできるのかというのを確認したのですが、できたとしてもトリッキーな印象は否めないので、このようなソースコードを書くことには慎重になった方が良いと思います。
コメント