Working with Chromium codebase I got used to macros like CHECK(condition);
, DCHECK(contidtion)
and NOTREACHED;
. They introduce assertions (usually preconditions) to the code and allow to terminate program with some info in a log, an in debug build DCHECK
and NOTREACHED
would also stop debugger to investigate the case. First one is active only in release mode and latter two only in debug - when "unactive" they would be replaced by an empty macro and not cause any overhead.
Is there some library in Java that allows such thing? I know that I could create some static method/object and depending on configuration swap configuration but I cannot see the way to avoid creating overhead. Besides, I wouldn't want to reinvent the wheel.
You can use the assert
keyword:
public void yourMethod(String arg) {
assert arg != null : "arg may not be null";
// ...
}
which is equivalent to
public void yourMethod(String arg) {
if (arg == null) throw new AssertionError("arg may not be null");
// ...
}
Asserts are disabled unless the -ea
switch is given when starting the JVM and will have close to 0 overhead when disabled.
The equivalent to NOTREACHED
would be assert false;
Related: What does the "assert" keyword do?