0
0

More than 3 years have passed since last update.

例外切り替えメソッド

Posted at

ものによって例外を切り替えたい共通処理

なんかAPIとかの戻り値が不正の場合、APIによって違う例外を使いたいけど

だいたいの処理は似ているみたいな状況でこんなの使えそうだなっていう備忘録

ThrowExceptionTest.java
package reflection;

public class ThrowExceptionTest {

    public static void main(String[] args) {
        try {
            throwException("w");
        } catch (WwwwException e) {
            System.out.println(e.getMessage());
        } catch (ZzzzException e) {
            System.out.println(e.getMessage());
        }
    }

    /**
     * フラグによって投げる例外を切り替える.
     * 
     * @param flg
     * @throws WwwwException
     * @throws ZzzzException
     */
    private static void throwException(String flg) throws WwwwException, ZzzzException {
        WwwwException w = new WwwwException("wでだめ");
        ZzzzException z = new ZzzzException("zでだめ");
        if (ApiName.W.getText().equals(flg)) {
            throw w;
        }
        if (ApiName.Z.getText().equals(flg)) {
            throw z;
        }
    }
}
class WwwwException extends Exception {
    private static final long serialVersionUID = 1L;
    WwwwException(String msg) {
        super(msg);
    }
}
class ZzzzException extends Exception {
    private static final long serialVersionUID = 1L;
    ZzzzException(String msg) {
        super(msg);
    }
}
enum ApiName {
    W("w"),
    Z("z");
    private String text;
    private ApiName(final String text) {
        this.text = text;
    }
    public String getText() {
        return text;
    }
}

だめな点 : キーとなるEnum持つのめんどくね

本当はExceptionクラスを引数としてうまいことする処理にしたかったんですけど
引数 : Class<? extends Throwable>
処理 : throw 引数.newInstance()
みたいなね

けどこれリフレクションを使うはめになるので


  • いろいろほかの例外処理が必要
  • Exceptionクラスがものによってできない

とかまぁいろんな理由でだめでした
ちなみにNumberFormatExceptionならできました
だめだって分かったのでどんなものならできるのかとか調べるのもやめました
たぶんIllegalArgumentExceptionとかその他の例外に引っかかっちゃう系がダメです
とにかくだめです


まぁ投げる例外だけ違う、似てるメソッドをいっぱい作るのもそれはそれで悪くなさそうですけど
やっぱ似てるならまとめたいですよねぇ
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0