今天在开发时,使用反射机制调用具体的类,方法时,在方法中,我测试时抛出了一个CodeException自定义异常,但是,却被Exception catch住了,当时很疑惑,CodeException哪去了呢?
后来,才发现,通过反射机制调用的方法中,若是抛出异常,都会被转为了InvocationTargetException。而我的代码中,也没有对此异常做处理,只想catchCodeException,最终被Exception catch住了。
<span style="font-size:14px;">if (paymentUser != null) {
String errorCode = "420406";
String errorMessage = "该手机号已经注册";
throw new CodeException(errorCode, errorMessage);
}</span>
再后来,查阅资料,发现,可以通过InvocationTargetException的getTargetException()方法获得原生的异常,这才将问题解决,
<span style="font-size:14px;">try {//反射
MethodReflectUtil.invokeExactMethod(serviceBase, method, params, paramsType);
} catch (NoSuchMethodException e) {
throw new CodeException("2007","系统内部错误");
} catch (IllegalAccessException e) {
throw new CodeException("2008","系统内部错误");
} catch (InvocationTargetException e) {
throw new CodeException("2009",e.getTargetException().getMessage());
}</span>
这样,满足了我的将异常被CodeException所捕获饿需求。
Java技术圆桌会-微信群,欢迎大家的加入,专注技术讨论和学习。
加入的同学可以先加我微信:luxun758521 备注-圆桌会,然后拉你进群。