我想知道为什么InvocationTargetException
旨在将其原因存储为目标,要求每个人都通过invocationTargetException.getTargetException()
而不是invocationTargetException.getCause()
解开它。这是通过记录不完整/错误的堆栈跟踪而导致错误处理错误的最常见情况之一。在Java语言中,这似乎是一个错误的设计决策,或者该设计的目的是什么?
最佳答案
您似乎有一个误解,即getCause
不会返回与getTargetException
相同的值,因为它确实会返回相同的值。只是早期Java版本中不存在getCause
。 InvocationTargetException
自Java 1.1开始就存在,而常规异常链接仅在Java 1.4中引入。
引用 InvocationTargetException
(强调我的名字):
和 InvocationTargetException.getTargetException()
文档(重点是我的):
如果查看getCause
和getTargetException
的实现,则它们具有相同的实现: