2

我正在为 OCP 7 做准备,我在其中一本证书书上遇到了这篇文章。

为了阻止您尝试用断言替换异常,AssertionError 不提供对生成它的对象的访问。你得到的只是字符串消息。

我尝试了很多可能性来执行所说的内容,但我发现AssertionError与其他人没有区别。

你能向我解释一下这句话是什么意思吗?

4

1 回答 1

3

解释可以在关键字文档的FAQ中找到:assert

为什么 AssertionError 不允许访问生成它的对象?同样,为什么不将断言中的任意对象传递给 AssertionError 构造函数来代替详细消息呢?

访问这些对象将鼓励程序员尝试从断言失败中恢复,这违背了该工具的目的。

考虑以下代码:

int i = 0;
assert i != 0 : "i must not be zero"

如果启用了断言,这将抛出一个AssertionError初始化为 的消息"i must not be zero"。但这就是这个错误将包含的所有内容。如果它包含更多信息,它将鼓励开发人员通过捕获AssertionError. 从理论上讲,仍然可以检查错误消息并尝试对它做一些事情,但是你真的违背了每一个好的做法。

于 2015-11-28T11:41:08.907 回答