我指的是这篇文章:What does the Java assert keyword do, and when should it be used?
我的理解是:断言有助于检查变量的有效性,如果检查失败,则抛出AssertionError
。而且此检查通常在生产中已关闭。
问题1:为什么在生产中我们不需要检查参数的有效性?我的意思是,用户可以传入无效参数来故意破坏程序,对吗?
问题2:由于断言通常在生产中关闭,是否意味着除了断言外,我还需要编写检查并抛出异常?
最佳答案
断言用于验证您的代码认为是正确的某些状态。
换句话说,如果断言失败,则您的应用程序世界将崩溃(或者可能只是一个错误)。
这与您可以处理的错误(即错误的用户输入)相反。
例如,假设您要求用户提供电话号码。如果电话号码格式错误,则不应断言,而应检查并做出相应响应(错误代码或显示错误消息)。
另一方面,假设您正在将电话号码存储在数据库中。加载应用程序后,您将连接到数据库,并从那里开始进行写入和读取(假定连接处于活动状态)。
如果要编写一种假定将电话号码存储在db中的方法,则不应编写代码来检查数据库的连接,而可以添加assert来检查连接是否存在。
这样,在开发模式下,如果(由于某种原因)遇到断言时数据库不可用的情况,您将拥有很好的可读堆栈跟踪。
经验角色:您应该断言您所中继的是正确的事情,应该没有充分的理由不这样做