首頁 >Java >java教程 >如何從 Java 高效呼叫 Clojure 函數?

如何從 Java 高效呼叫 Clojure 函數?

Barbara Streisand
Barbara Streisand原創
2024-12-02 10:43:09574瀏覽

How Can I Efficiently Call Clojure Functions from Java?

從Java 調用Clojure

簡介:

Clojurejure 之間的介面是常見的許多項目中的要求。然而,使用 clojure.lang.RT 的舊方法現在已經過時了。在這篇文章中,我們將解釋執行此整合的簡化方法,假設有一個預先建置的 Clojure jar 並將其包含在類別路徑中。

逐步說明:

  1. 建立Clojure命名空間:

    建立Clojure命名空間:

    (ns com.domain.tiny
      (:gen-class
        :name com.domain.tiny
        :methods [#^{:static true} [binomial [int int] double]]))
  2. 使用:class-class關鍵字定義Clojure 命名空間,以指定可從Java 存取的Java 類別和方法。例如:
  3. 定義靜態方法包裝器:

  4. 使用Java- 包裝要從Java 調用的Clojure 函數可呼叫包裝器,以連字符為前綴(例如,-binomial)。這允許 Java 呼叫 Clojure 函數。

    建置並包含 Clojure Jar:

  5. 將 Clojure 命名空間編譯為 jar 檔案並包含它位於 Java 專案的類別路徑中。確保 Clojure jar 也存在於類別路徑中。

    從 Java 呼叫 Clojure:

    import com.domain.tiny;
    
    public class Main {
        public static void main(String[] args) {
            System.out.println("(binomial 5 3): " + tiny.binomial(5, 3));
        }
    }
  6. 在您的 Java 程式中,從 Java 呼叫 Clojure 類別並像呼叫 Java 方法一樣呼叫靜態方法。例如:
  7. 設定編譯參數:

編譯Java部分時,指定類別路徑以包含Clojure jar和包裝產生的類別和清單放入JAR 中文件。

更新的範例(使用現代工具):

使用Clojure 1.5.1、Leiningen 2.1.3 和JDK 1.7.0更新255 :

    Clojure部分:
  • ; Same as the original example code from the introduction
  • 建立 Leiningen 專案並使用以下內容更新 project.clj:
  • 確保使用 lein 解決依賴關係。
  • 使用 lein jar 將 Clojure 程式碼打包到 jar 中。

將 Clojure jar 和建造的 Clojure jar 放在方便的位置。

    Java部分:
  • 建立一個Java類別(例如 Main.java)如原始範例所示。

    javac -g -cp target\com.domain.tiny-0.1.0-SNAPSHOT.jar -d target\src\com\domain Main.java
  • 編譯Java 類別:
  • ; Same as the original example code from the introduction
  • 建立清單檔案(Manifest.txt ):
  • jar cfm Interop.jar Manifest.txt Main.class lib\com.domain.tiny-0.1.0-SNAPSHOT.jar lib\clojure-1.5.1.jar
  • 將Java 類別打包將Clojure jar 放入JAR文件中:

    java -jar Interop.jar
運行Java 程式:

此更新的範例演示​​了互通性使用現代工具在互通性使用現代工具在互通性使用現代工具Clojure 和Java 之間切換。

以上是如何從 Java 高效呼叫 Clojure 函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn