Clojure Java接口

2018-12-29 16:55 更新

正如我們已經(jīng)知道的,Clojure代碼最終在Java虛擬環(huán)境上運行。 因此,只有Clojure能夠利用Java中的所有功能才有意義。 在本章中,我們來討論Clojure和Java之間的相關(guān)性。

調(diào)用Java方法

可以使用點表示法調(diào)用Java方法。 一個例子是字符串。 因為Clojure中的所有字符串都是Java字符串,所以你可以在字符串上調(diào)用普通的Java方法。

以下程序中顯示了如何完成此操作的示例。

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

上述程序產(chǎn)生以下輸出。 你可以從代碼中看到,如果你只是調(diào)用任何字符串方法的點符號,它也將在Clojure工作。

輸出

HELLO WORLD

調(diào)用帶有參數(shù)的Java方法

您還可以使用參數(shù)調(diào)用Java方法。 以下程序中顯示了如何完成此操作的示例。

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

上述程序產(chǎn)生以下輸出。 你可以從上面的代碼看到,我們將參數(shù)“e”傳遞給indexOf方法。 上述程序產(chǎn)生以下輸出。

輸出

1

創(chuàng)建Java對象

對象可以在Clojure中通過使用'new'關(guān)鍵字來創(chuàng)建,類似于在Java中所做的。

以下程序中顯示了如何完成此操作的示例。

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

上述程序產(chǎn)生以下輸出。 你可以從上面的代碼中看到,我們可以使用'new'關(guān)鍵字從現(xiàn)有的Java類中創(chuàng)建一個新的對象。 我們可以在創(chuàng)建對象時傳遞值,就像我們在Java中一樣。 上述程序產(chǎn)生以下輸出。

輸出

Hello

下面是另一個例子,顯示了如何創(chuàng)建一個Integer類的對象,并在正常的Clojure命令中使用它們。

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

上述程序產(chǎn)生以下輸出。

輸出

3

Import 命令

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

以下示例顯示如何使用import命令。 在示例中,我們使用import命令從java.util.stack庫中導(dǎo)入類。 然后我們可以使用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)

上述程序產(chǎn)生以下輸出。

輸出

First Element

運行代碼使用java命令

Clojure代碼可以使用Java命令運行。 下面是如何做到這一點的語法。

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

你必須提到Clojure jar文件,以便所有基于Clojure的類都將在JVM中加載。 'main.clj'文件是需要執(zhí)行的Clojure代碼文件。

Java的內(nèi)置函數(shù)

Clojure可以使用Java的許多內(nèi)置函數(shù)。

數(shù)學(xué)PI函數(shù) - Clojure可以使用Math方法來獲取PI的值。 下面是一個示例代碼。

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

上面的代碼產(chǎn)生以下輸出。

輸出

3.141592653589793

系統(tǒng)屬性 - Clojure也可以查詢系統(tǒng)屬性。 下面是一個示例代碼。

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

根據(jù)系統(tǒng)上Java的版本,將顯示相應(yīng)的值。 下面是一個示例輸出。

輸出

1.8.0_45

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號