InvocationTargetException

来源:互联网 发布:人工智能百度云资源 编辑:程序博客网 时间:2024/06/04 19:33
InvocationTargetException 是一种包装由调用方法或构造方法所抛出异常的受查异常。这个异常并不是Eclipse插件开发特有的,而是标准JDK中的,它定义在 java.lang.reflect包下。在进行Java开发的时候很少会接触到这个异常,不过在进行Eclipse插件开发中则不同,很多API都声明抛出此类异常,因此必须对此异常进行处理。
但是InvocationTargetException太过于宽泛,在trouble shouting的时候,不能给人非常直观的信息,所以在处理反射方法异常的时候,我们需要把这个InvocationTargetException的targetException提取处理,重新抛出,因为这个才是对我们分析程序bug真正有帮助的异常:
一般情况下我们会调用e.getMessage()或者e.printStackTrace();查看错误,但是通过查看InvocationTargetException的源码得InvocationTargetException 并没有覆盖getMessage方法,所以消息当然是空的了。我们需要调用InvocationTargetException 的getTargetException方法得到要被包装的异常,这个异常才是真正我们需要的异常。
Apache Ranger的源码中是如下处理的:
try {m.invoke(null, master) ;logInfo("Execute method name [" + mname + "] in Class [" +  cName + "] is successful.");} catch (InvocationTargetException e) {Throwable cause = e ;boolean tableExistsExceptionFound = false ;if  (e != null) { Throwable ecause = e.getTargetException() ;if (ecause != null) {cause = ecause ;if (ecause instanceof TableExistsException) {tableExistsExceptionFound = true ;}}}


0 0
原创粉丝点击