Java Interoperability - sebhoss/finj GitHub Wiki

To call one of the existing functions from Java code, use the following pattern:

 Var require = RT.var("clojure.core", "require");
 Symbol namespace = Symbol.intern("DESIRED.NAMESPACE.HERE");
 Var function = RT.var("DESIRED.NAMESPACE.HERE", "DESIRED-FUNCTION");
 Keyword keyword = Keyword.intern("REQUIRED-KEYWORD");

 require.invoke(namespace);
 Object result = function.invoke(keyword, VALUE);

The following example uses (ratio/debt-ratio) to calculate the debt ratio:

 Var require = RT.var("clojure.core", "require");
 Symbol ratio = Symbol.intern("com.github.sebhoss.finj.ratio");
 Var debtRatio = RT.var("com.github.sebhoss.finj.ratio", "debt-ratio");
 Keyword totalDebt = Keyword.intern("total-debt");
 Keyword totalAssets = Keyword.intern("total-assets");

 require.invoke(ratio);
 Object result = debtRatio.invoke(totalDebt, 100, totalAssets, 1000);
 System.out.println(result); // => 1/10
⚠️ **GitHub.com Fallback** ⚠️