使用前提条件在 Java 中进行调试



使用Chromium代码库,我习惯了像CHECK(condition);DCHECK(contidtion)NOTREACHED;这样的宏。它们在代码中引入断言(通常是先决条件),并允许使用日志中的一些信息终止程序,调试构建DCHECKNOTREACHED也会停止调试器以调查情况。第一个仅在发布模式下处于活动状态,后两个仅在调试模式下处于活动状态 - 当"非活动"时,它们将被空宏替换,并且不会产生任何开销。

Java 中是否有允许这样的事情的库?我知道我可以创建一些静态方法/对象,并根据配置交换配置,但我看不到避免产生开销的方法。此外,我不想重新发明轮子。

您可以使用

assert关键字:

public void yourMethod(String arg) {
    assert arg != null : "arg may not be null";
    // ...
}

相当于

public void yourMethod(String arg) {
    if (arg == null) throw new AssertionError("arg may not be null");
    // ...
}

除非在启动 JVM 时给出了-ea开关,否则断言将被禁用,并且在禁用时开销接近 0。

相当于NOTREACHED将是assert false;

相关:"断言"关键字有什么作用?

我编写了一个库,帮助编写前置条件,后置条件,重点是可读性。例如:

// Input
List<Integer> actual = Arrays.asList(2, 3, 4, 6);
List<Integer> expected = Arrays.asList(1, 3, 5);
requireThat(actual, "actual").containsAll(expected);
// Output
java.lang.IllegalArgumentException: actual must contain all elements in: [1, 3, 5]
Actual : [2, 4, 6]
Missing: [1, 5]

相关内容

  • 没有找到相关文章

最新更新