在Java代码中断言

时间:2014-06-13 07:40:59

标签: java debugging assert

我想在Java代码中添加调试消息。我想用现代方法改变断言

public void registerForRead(SSLChannel l) {
  debug("Error");
  boolean wasNotPresent = readListeners.add(l);
  assert wasNotPresent : "Already registered";
}

如果我以这种方式更改代码,我会保留逻辑吗?

public void registerForRead(SSLChannel l) {
  debug("Error");
  boolean wasNotPresent = readListeners.add(l);
  if (wasNotPresent) {
    debug("Already registered");
  }
}

2 个答案:

答案 0 :(得分:1)

断言声明断言某些期望总是得到满足,冲突导致AssertionError

因此,明确记录不是这里的替代品

答案 1 :(得分:0)

根据问题中的信息,我只能提出一些改进日志记录的建议:

  • 调试( “错误”);根本不是很有帮助。您希望能够激活调试级别并获得有关错误和位置的明确信息。

  • 断言仅在使用-ea参数执行虚拟机时才有效。 (启用断言)。在生产中,您不希望仅仅为了以防检查而使应用程序崩溃。在开发过程中,您希望了解不应发生的奇怪事情。

  • 有什么不对,但我看不出为什么也没有例外。确保您没有重新发明错误处理机制。例外是为此而设计的。

  • 有时使用旧的System.out.println或等效日志记录可能是开发人员可以接受的。但是,如果你发现自己经常这样做,那就是发育问题的症状(因为难闻的气味):使用良好的记录痕迹,单一测试等。