无法重新抛出、覆盖、处理或其他任何异常

An exception that cannot be rethrown, overridden, dealt with or wathever

我有一个调用此方法的 servlet

TemplateLoader.load(TemplateReplacer replacer);

TemplateReplacer 的特定实现可能会生成 MalformedURLException,因为它会替换 URL。

我的困境是:

  1. 我不能让这个异常上升到 TemplateLoader 级别,因为 TemplateLoader 是通用的,不应该捕获或抛出 MalformedURLException
  2. 我无法处理 TemplateReplacer 中的异常,因为在这个级别我无能为力。
  3. 我不能重新抛出 RuntimeException,因为正确的做法是在 servlet 级别捕获异常,我可以通过向用户返回正确的错误消息来处理它。
  4. 但是我找不到可以重用的现有已检查异常,足够通用以在 TemplateLoader 级别有意义。
  5. 而且我不能使用异常 Exception,因为在 servlet 级别捕获异常 Exception 对我来说听起来不太好。仅仅捕获异常被认为是不好的做法。
  6. 我也无法创建自己的异常,因为没有附加值(因为没有真正的新代码可以添加到这个自定义异常中)

所以,我陷入了这种困境。你建议我做什么?

您的问题的解决方案是定义和使用自定义异常。您在#6 中的分析存在缺陷。自定义异常提供的价值是将具体实现中可能出现的各种异常进行分组(封装)。

您可能想要创建多个自定义例外。例如,一个表示暂时性问题(重试可能有效),另一个表示配置存在基本问题,需要更改某些内容才能成功。如果您创建多个异常,您可能应该考虑继承层次结构,以便调用者可以处理通用异常或适当处理异常的特定类型。