在域类中使用断言而不是异常处理是否有任何情况......

有帮助吗?

解决方案

使用异常进行参数验证和其他检查,以验证您的类的用户是否按预期使用它们。

使用断言进行内部一致性检查,即表明搞砸了,而不是你班级的用户。

因此,如果您的类的用户看到断言失败,他们知道它(可能)是代码中的内部错误,而不是他们对代码的使用。另一方面,如果获取参数验证异常,他们就知道这是他们的错误。

其他提示

从不。断言不是错误处理的有效形式。使用它们来帮助识别测试期间的程序错误。

断言反映了一个不应该发生且不被预期的状态,其中应用程序不能因某种原因继续执行,而异常表示不被视为“正常”的状态,但这并非意外,并且可以从中恢复。

例如,如果我在堆上分配空间,并且此分配失败,那么我无法继续工作,因此我断言返回的地址是有效的;如果它无效,则断言失败,程序失败。

另一方面,如果我打开一个文件进行阅读,但它不存在,那么就有可能从这种情况中恢复,在这种情况下抛出一个异常(并抓住并处理到可能的)。

通常,断言在调试阶段最有用,而异常则被视为常规程序流和错误处理的一部分。普遍的共识是,应该在生产代码中禁用断言(以防止用户明显崩溃),而我读过一个思想学派认为这会适得其反,并且用户应该看到断言失败,以便他们可以正确报告问题。

就个人而言,我有时会将这两种技术结合起来;通常情况下,如果我抓住一个我认为不可能被抛出的异常。以上面的例子为例,如果我在尝试打开它之前检查文件是否存在,那么我不希望抛出异常,如果是,那么我倾向于通过在相关的catch块中引发一个断言来解决这个问题。我发现这在Java中是一种特别有用的技术,其中完全检查了这些异常。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top