ものによって例外を切り替えたい共通処理
なんか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
とかその他の例外に引っかかっちゃう系がダメですとにかくだめです
まぁ投げる例外だけ違う、似てるメソッドをいっぱい作るのもそれはそれで悪くなさそうですけど
やっぱ似てるならまとめたいですよねぇ