InvocationTargetException

InvocationTargetException

我想知道为什么InvocationTargetException旨在将其原因存储为目标,要求每个人都通过invocationTargetException.getTargetException()而不是invocationTargetException.getCause()解开它。这是通过记录不完整/错误的堆栈跟踪而导致错误处理错误的最常见情况之一。在Java语言中,这似乎是一个错误的设计决策,或者该设计的目的是什么?

最佳答案

您似乎有一个误解,即getCause不会返回与getTargetException相同的值,因为它确实会返回相同的值。只是早期Java版本中不存在getCauseInvocationTargetException自Java 1.1开始就存在,而常规异常链接仅在Java 1.4中引入。

引用 InvocationTargetException (强调我的名字):



InvocationTargetException.getTargetException() 文档(重点是我的):



如果查看getCausegetTargetException的实现,则它们具有相同的实现:

10-07 19:25