Skip to content

Instantly share code, notes, and snippets.

@vishnuvp
Last active January 29, 2019 13:17
Show Gist options
  • Save vishnuvp/6d1ff9e2bcbeb8a44234fee99106d74f to your computer and use it in GitHub Desktop.
Save vishnuvp/6d1ff9e2bcbeb8a44234fee99106d74f to your computer and use it in GitHub Desktop.
Java - Clojure Interop

This Java class will act as a wrapper class for a clojure project. The clojure jar should be available in the namespace. This require clojure version >1.6

...
public class JavaSide {
    private final IFn clojureApiHandlerFn;
    
    public JavaSide() {
        new clojure.lang.RT();
        
        /* Import clojure core. */
        final IFn require = Clojure.var("clojure.core", "require");
        
        // Invoke the clojure namespace
        require.invoke(Clojure.read("clojure.namespace"));
        
        // Clojure method handler
        this.clojureApiHandlerFn = Clojure.var("clojure.namespace", "clojure-method");
    }
    
    private Object invokeClojureFunction(IFn fn, Parameter param) {
           return fn.invoke(param);
    }
    
    public Object clojureMethod(Parameter param) {
        return invokeClojureFunction(this.clojureApiHandlerFn, param);
    }
}
...

Example

...
JavaSide wrapper = new JavaSide();
Object response = wrapper.clojureMethod(param);
...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment