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