我想知道如何知道创建并抛出已检查异常或未检查异常。
例如,我有一项服务,它会获取一些数据并在使用之前对其进行验证。在验证过程中,某个字段不符合规则,我想抛出一个异常,比如 ValidationException()。我如何知道决定应该检查还是不检查。
在另一种情况下,我从我的代码调用外部 Web 服务,例如 google stock api。假设我有 3 秒的超时时间。如果时间到期,我想抛出一个异常,比如 BackendException()。我如何知道它应该是检查异常还是未检查异常。
提前致谢。
可能有不同的意见,但我想说区别在于调用者应该如何处理该异常:
- 如果您想确保调用者通过执行某些操作(记录、尝试恢复等)或重新抛出来处理异常,那么请使用已检查的异常。会说一个例子
ValidationException
:如果数据无效,调用者应该必须处理该问题,例如通过告诉某人修复数据或尝试其他方法。 (请注意,可能存在未经检查的验证异常,例如javax.validation.ValidationException
。不检查这些内容可能有多种原因,例如如果框架不允许/支持检查异常,或者某些中央处理程序无论如何都会捕获它们,那么开发人员就不必费心了。)
- 如果您不想强制调用者处理通常情况下的异常不应该被抛出(例如编程错误等)使用未经检查的异常。一个例子可能是总是令人恐惧的
NullPointerException
: it 不应该如果您想要使用的内容为 null,则可能会被视为编程错误。如果某些内容可能为空但不应该为空,您可能需要使用检查异常。
请注意,某些库/方法使用IllegalArgumentException
这是一个未经检查的异常。如果抛出此异常,通常会出现编程错误,因为违反了方法的约定(例如参数值不得为负),并且调用者应该修复代码或自己进行一些检查。
另一种观点可能是:在某些情况下是否会抛出异常?预期的异常(仍然意味着发生了某种错误)将被检查异常,因为这样您就可以与调用者沟通,他应该期望在某些情况下抛出这些异常(例如,如果数据无效)。如果异常是意外的,你不应该强迫调用者处理这样的异常,因为你根本不希望它被抛出 - 因此它将是一个未经检查的异常。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)