从 Java 调用 Clojure
从 Java 调用 Clojure 并不像仅仅编译 jar 并调用其内部方法那么简单。相反,成功的互操作性需要特定的技术。
创建 Clojure 命名空间
要使 Clojure 函数可从 Java 调用,必须使用 :gen-class 指令。该指令指定要向 Java 公开的类名和方法。例如,以下代码片段定义了一个名为 binomial 的静态方法的命名空间:
(ns com.domain.tiny (:gen-class :name com.domain.tiny :methods [#^{:static true} [binomial [int int] double]]))
使用包装函数
Java 需要一个调用 Clojure 函数的包装函数。此包装函数应与 Clojure 函数同名,但带有前导连字符 (-)。例如,前面代码片段中的binomial 函数可以包装到 -binomial 中以进行 Java 访问:
(defn -binomial "A Java-callable wrapper around the 'binomial' function." [n k] (binomial n k))
将 Clojure Jar 添加到类路径
必须将 Clojure jar 添加到类路径中才能生成编译后的代码Java 可以访问。此步骤确保必要的 Clojure 类可供执行。示例 Java 代码
定义了 Clojure 命名空间和包装函数后,下面是一个基本的 Java 程序,调用 Clojure 中定义的-binomial 函数jar:
import com.domain.tiny; public class Main { public static void main(String[] args) { System.out.println("(binomial 5 3): " + tiny.binomial(5, 3)); System.out.println("(binomial 10042, 111): " + tiny.binomial(10042, 111)); } }
运行 Java 程序
确保 Clojure jar 位于类路径上,然后运行 Java 程序:$ java -cp tiny.jar Main (binomial 5 3): 10.0 (binomial 10042, 111): 4.9068389575068143E263
-binomial 函数可从 Java 访问,并且其结果可用于用于 Java 计算。
以上是如何从 Java 调用 Clojure 函数?的详细内容。更多信息请关注PHP中文网其他相关文章!