InvocationTargetException
2016-04-14 15:20
621 查看
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 ; } } }
相关文章推荐
- Android MediaController Api译文
- 用栈实现走迷宫
- 从尾到头打印单链表(C语言)
- Intent详解
- 统计利用先序遍历创建的二叉树的深度
- iOS 获取系统当前时间
- ListView的优化
- Lucene实战构建索引
- TDD
- begin
- MySQL的Explain命令
- 柔性数组
- java中String+String与StringBuilder的append()方法的效率问题
- 怎么将jpg转换成pdf文件
- 数字转换成字符串,int 转换成const char*
- 优先级队列与堆排序
- 236. Lowest Common Ancestor of a Binary Tree
- Android studio 2.0--android增量更新的那些事
- ios socket简单使用
- ios如何添加第三方的字体库