Clojure - Java 介面



我們已經知道,Clojure 程式碼最終執行在 Java 虛擬環境中。因此,Clojure 能夠利用 Java 的所有功能也就不足為奇了。在本章中,讓我們討論 Clojure 和 Java 之間的關係。

呼叫 Java 方法

可以使用點表示法呼叫 Java 方法。例如字串。由於 Clojure 中的所有字串都是 Java 字串,因此您可以在字串上呼叫普通的 Java 方法。

以下程式演示瞭如何執行此操作。

示例

(ns Project
   (:gen-class))
(defn Example []
   (println (.toUpperCase "Hello World")))
(Example)

上述程式產生以下輸出。您可以從程式碼中看到,如果您只是對任何字串方法呼叫點表示法,它在 Clojure 中也能正常工作。

輸出

HELLO WORLD

帶引數的 Java 方法呼叫

您還可以呼叫帶有引數的 Java 方法。以下程式演示瞭如何執行此操作。

示例

(ns Project
   (:gen-class))
(defn Example []
   (println (.indexOf "Hello World","e")))
(Example)

上述程式產生以下輸出。您可以從上面的程式碼中看到,我們正在將引數“e”傳遞給 indexOf 方法。上述程式產生以下輸出。

輸出

1

建立 Java 物件

與 Java 中的操作類似,可以使用“new”關鍵字在 Clojure 中建立物件。

以下程式演示瞭如何執行此操作。

示例

(ns Project
   (:gen-class))
(defn Example []
   (def str1 (new String "Hello"))
   (println str1))
(Example)

上述程式產生以下輸出。您可以從上面的程式碼中看到,我們可以使用“new”關鍵字從 Java 中現有的 String 類建立一個新物件。我們可以在建立物件時傳遞值,就像我們在 Java 中所做的那樣。上述程式產生以下輸出。

輸出

Hello

以下是另一個示例,它展示瞭如何建立 Integer 類的物件並在普通的 Clojure 命令中使用它們。

示例

(ns Project
   (:gen-class))
(defn Example []
   (def my-int(new Integer 1))
   (println (+ 2 my-int)))
(Example)

上述程式產生以下輸出。

輸出

3

匯入命令

我們還可以使用 import 命令將 Java 庫包含到名稱空間中,以便可以輕鬆訪問類和方法。

以下示例展示瞭如何使用 import 命令。在示例中,我們使用 import 命令從java.util.stack庫匯入類。然後,我們可以像使用它們一樣使用 stack 類的 push 和 pop 方法。

示例

(ns Project
   (:gen-class))
(import java.util.Stack)
(defn Example []
   (let [stack (Stack.)]
   (.push stack "First Element")
   (.push stack "Second Element")
   (println (first stack))))
(Example)

上述程式產生以下輸出。

輸出

First Element

使用 Java 命令執行程式碼

可以使用 Java 命令執行 Clojure 程式碼。以下是執行此操作的語法。

java -jar clojure-1.2.0.jar -i main.clj

您必須提及 Clojure jar 檔案,以便所有基於 Clojure 的類都載入到 JVM 中。“main.clj”檔案是要執行的 Clojure 程式碼檔案。

Java 內建函式

Clojure 可以使用許多 Java 的內建函式。其中一些包括:

Math PI 函式 - Clojure 可以使用 Math 方法獲取 PI 的值。以下是一個示例程式碼。

示例

(ns Project
   (:gen-class))
(defn Example []
   (println (. Math PI)))
(Example)

以上程式碼產生以下輸出。

輸出

3.141592653589793

系統屬性 - Clojure 還可以查詢系統屬性。以下是一個示例程式碼。

示例

(ns Project
   (:gen-class))
(defn Example []
   (println (.. System getProperties (get "java.version"))))
(Example)

根據系統上 Java 的版本,將顯示相應的值。以下是一個示例輸出。

輸出

1.8.0_45
廣告

© . All rights reserved.