
import javax.script.Bindings;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import javax.script.SimpleBindings;

public class NashornBooleanTest {
    public static void main(String[] args) throws ScriptException {
        ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript");
        Bindings bindings = new SimpleBindings();
        bindings.put("checkKittens", null);
        bindings.put("profile", new Profile());
        eval("!null", engine, bindings);
        eval("!checkKittens", engine, bindings);
        eval("!profile.getNullValue()", engine, bindings);
        eval("!!profile.isLikesKittens()", engine, bindings);
        eval("!profile.isLikesKittens()", engine, bindings);
    }

    private static void eval(String statement, ScriptEngine engine, Bindings bindings) throws ScriptException {
        System.out.println(statement + " = " + engine.eval(statement, bindings));
    }

    public static class Profile {
        Boolean likesKittens;

        public Boolean isLikesKittens() {
            return likesKittens;
        }

        public Object getNullValue() {
            return null;
        }
    }
}

