Javaで例外を先に生成して後でthrowする方法

java

通常の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したいという話が出たので、そもそもできるのかというのを確認したのですが、できたとしてもトリッキーな印象は否めないので、このようなソースコードを書くことには慎重になった方が良いと思います。

コメント

タイトルとURLをコピーしました