- Clojure 教程
- Clojure - 首頁
- Clojure - 概述
- Clojure - 環境
- Clojure - 基本語法
- Clojure - REPL
- Clojure - 資料型別
- Clojure - 變數
- Clojure - 運算子
- Clojure - 迴圈
- Clojure - 決策
- Clojure - 函式
- Clojure - 數字
- Clojure - 遞迴
- Clojure - 檔案 I/O
- Clojure - 字串
- Clojure - 列表
- Clojure - 集合
- Clojure - 向量
- Clojure - 對映
- Clojure - 名稱空間
- Clojure - 異常處理
- Clojure - 序列
- Clojure - 正則表示式
- Clojure - 斷言
- Clojure - 解構
- Clojure - 日期和時間
- Clojure - 原子
- Clojure - 元資料
- Clojure - StructMaps
- Clojure - 代理
- Clojure - 觀察者
- Clojure - 宏
- Clojure - 參考值
- Clojure - 資料庫
- Clojure - Java 介面
- Clojure - 併發程式設計
- Clojure - 應用
- Clojure - 自動化測試
- Clojure - 庫
- Clojure 有用資源
- Clojure - 快速指南
- Clojure - 有用資源
- Clojure - 討論
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