2013-06-20 156 views
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语句来测试空值来提高我的代码质量。似乎工作的方式,我最终不得不雏菊链我的断言,因为如果我测试的第一件事是空的,那么下一个将是一个空以及......我是否正确使用Java断言?

+2

使用Java断言,冒号后的部分是消息给读者,并到标准输出。另外,如果'readStream'为空,它们的下一部分永远不会被执行,所以你不必担心'cardInfo'。但是你从哪里得到'readStream'呢?这种方法的目的是什么? –

+0

请注意,您需要使用'-ea'启动JVM才能启用断言 – fge

回答

0

一个断言是它可以在开发中和在生产中关闭。在发布之前,它会揭示错误,大概在它们发生严重损坏之前。关闭时,断言是无效的,并且(有希望)具有可忽略的性能影响。

我想问自己的问题是:“自我,我的断言使用是否符合这些标准?”

1

下面是断言

  • 一些准则与问候,不要使用断言验证的公共职能参数。 这些函数应抛出NullPointerException, IllegalArgumentException和其他相关异常。 由于公共函数将被其他程序员使用,因此如果他们搞砸了,你应该确保他们得到正确的错误。
  • 使用断言来检查 保护和私有访问方法的参数的先决条件和后置条件。
  • 请勿使用断言来检查软件用户错误。如果您希望 您的基于网络的在线销售系统的用户输入一个10位数的 信用卡号码,并且她只输入9位数字,请不要使用断言。 相反,抛出IllegalArgumentException。如果你使用断言,尽快 作为有人关闭您的servlet容器断言,您的系统中的 检查逻辑将消失。
  • 用断言检查参数和变量的条件 不应该发生
  • 用断言检查无效代码分支
  • 不要使用断言做任何工作。断言是开发人员级别 错误,不应用于修复程序中的状态或执行复杂日志记录。此外,不要忘记,如果用户运行没有声明的 程序,代码将会消失。如果该代码是 对于程序的运行至关重要,那么您可能会在深层次上遇到问题 。
  • 不要打扰国际化断言错误消息。由于断言是开发人员级别的问题,所以 国际化将浪费时间。
  • 使用断言来检查发布条件。如果你创建的方法和 希望它永远不会返回NULL用户