1
public Card getCard()throws IOException{
    Card c = null;
    String cardInfo = null;  
    assert readStream != null: cardInfo = readStream.readLine();
    assert cardInfo != null: c = CreateCard(cardInfo);
    return c;
}

我有点不习惯,我正在尝试通过使用 assert 语句来测试空值来提高我的代码质量。它似乎工作的方式我最终不得不菊花链我的断言,因为如果我测试的第一件事是空的,那么下一个也将是空......

4

2 回答 2

1

以下是关于断言的一些指南

  • 不要使用断言来验证公共函数的参数。这些函数应该抛出 NullPointerException、IllegalArgumentException 和其他相关异常。由于其他程序员将使用公共函数,因此您应该确保它们在搞砸时得到正确的错误。
  • 使用断言检查受保护和私有访问方法的参数的前置条件和后置条件。
  • 不要使用断言来检查软件用户错误。如果您希望基于 Web 的在线销售系统的用户输入 10 位数的信用卡号码而她只输入 9 位数,请不要使用断言。相反,抛出 IllegalArgumentException。如果你使用断言,一旦有人在你的 servlet 容器上关闭断言,你系统中的检查逻辑就会消失。
  • 使用断言检查参数和变量中不应该发生的情况
  • 使用断言检查无效的代码分支
  • 不要使用断言来做任何工作。断言是开发人员级别的错误,不应用于修复程序中的状态或执行复杂的日志记录。另外,不要忘记如果用户在没有断言的情况下运行程序,代码将会消失。如果该代码对程序的运行至关重要,那么您可能会遇到大麻烦。
  • 不要打扰国际化断言错误消息。同样,由于断言是开发人员级别的问题,因此将它们国际化将是浪费时间。
  • 使用断言检查后置条件。如果您创建一个方法并期望它永远不会返回 null 给用户
于 2013-06-20T05:34:25.810 回答
0

断言的价值在于它可以在开发中打开,在生产中关闭。开启时,它会在发布之前显示错误,大概是在它们造成很大破坏之前。关闭时,断言是不活跃的,并且(希望)对性能的影响可以忽略不计。

我认为要问自己的问题是:“自我,我对断言的使用符合这些标准吗?”

于 2013-06-20T04:57:20.193 回答