我正在为 OCP 7 做准备,我在其中一本证书书上遇到了这篇文章。
为了阻止您尝试用断言替换异常,AssertionError 不提供对生成它的对象的访问。你得到的只是字符串消息。
我尝试了很多可能性来执行所说的内容,但我发现AssertionError
与其他人没有区别。
你能向我解释一下这句话是什么意思吗?
解释可以在关键字文档的FAQ中找到:assert
为什么 AssertionError 不允许访问生成它的对象?同样,为什么不将断言中的任意对象传递给 AssertionError 构造函数来代替详细消息呢?
访问这些对象将鼓励程序员尝试从断言失败中恢复,这违背了该工具的目的。
考虑以下代码:
int i = 0;
assert i != 0 : "i must not be zero"
如果启用了断言,这将抛出一个AssertionError
初始化为 的消息"i must not be zero"
。但这就是这个错误将包含的所有内容。如果它包含更多信息,它将鼓励开发人员通过捕获AssertionError
. 从理论上讲,仍然可以检查错误消息并尝试对它做一些事情,但是你真的违背了每一个好的做法。