Search code examples
javapreconditionspost-conditions

Debugging in Java with preconditions


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.


Solution

  • 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?