【发布时间】:2013-10-15 12:42:38
【问题描述】:
当然,应在您认为的适当级别并适当地处理异常。假设您不知道如何处理已检查的异常,并且您将其包装在适当的自定义未检查异常中只是为了传播到顶层(假设您不处理该包装的异常和其他可能的未检查异常在某些媒介将原始异常发生的级别提高(因为您不想要或不知道如何))。更进一步,所有未处理的异常(未检查和已检查,被包装在未检查中)都达到了顶层(主方法,webapp 控制器等);我当然应该做点什么。我要做的就是通过使用日志条目来通知开发人员出了点问题,并告知用户他的请求无法正确服务(根据适用于该异常的消息使用不同的消息)。为此,我在 catch 块 RuntimeException 中使用(如果它未捕获自定义未检查异常,我将向用户发送消息“发生严重问题”或类似的信息;此类非自定义未检查异常将被缓存的可能性更大大于零,您必须就此进行沟通)。一些文章(first,second)建议不要在 catch 块中通过超类型捕获子类的实例(或者它只与检查的异常有关?)。如果我在 catch 块中使用了准确类型的异常,我会错过一些未经检查的异常并且应用程序会崩溃(当然,在执行日志记录和通知用户的那些 catch 块中会有重复的代码 sn-ps)。例如,我可以提供在 jsp 翻译阶段构建的 sn-p,并使用超类型来捕获该超类型的子类的实例
// some code
try {
// body of translated JSP here...
} catch (Exception e) {
out.clear();
pageContext.handlePageException(e);
}
// some code
我的问题:在顶层的 catch 块中使用 RuntimeException 向开发人员报告所有问题并向用户传达所有发生的问题是否正确?当然,例外在这种情况下的处理简化为仅通知开发人员和用户发生了问题并且没有恢复策略。也许很难将这个概念称为异常处理。请纠正我,我很欣赏关于这个概念的任何想法。
【问题讨论】: