我正在使用反射将一些数据添加到来自第三方库的类中的私有变量.一路上有大约四种不同的例外可以抛出;所有这些都与反思有关,而且所有这些都不太可能发生.我正在硬编码所涉及的类和变量的名称.我不太可能收到任何未找到的类或未找到字段的错误,除非该库有一天升级并且已经发生了显着变化.
我宁愿不为我的调用者声明所有这四个异常来处理.他可能永远不会见到他们.我想抓住所有这些并抛出另一个例外,说“发生了Java反射错误;可能是库已经以与此方法不兼容的方式升级和更改了.”是否存在我可以抛出的标准Java异常,它表示只是一般反射错误?我应该定义自己的吗?或者最好只声明这个方法可以抛出所有可能的反射异常?
解决方法
如果您从未期望它们发生,您可以将所有异常转换为AssertionError.
如果要处理特定异常,可以解包InvocationTargetException.
如果你想抛出方法引发的实际异常而不是InvocationTargetException,你可以使用这个技巧,但它可能比有用更令人困惑
如果要处理特定异常,可以解包InvocationTargetException.
如果你想抛出方法引发的实际异常而不是InvocationTargetException,你可以使用这个技巧,但它可能比有用更令人困惑
} catch (InvocationTargetException e) { // Throw any exception in the current thread (even if it is a checked exception) Thread.currentThread().stop(e.getCause()); }