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図書館。その後、スタッククラスのpush andpopメソッドをそのまま使用できます。

(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コマンドを使用したコードの実行

Clojureコードは、Javaコマンドを使用して実行できます。以下は、これを行う方法の構文です。

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

すべてのClojureベースのクラスがJVMにロードされるように、Clojurejarファイルについて言及する必要があります。'main.clj'ファイルは、実行する必要のあるClojureコードファイルです。

Java組み込み関数

Clojureは、Javaの組み込み関数の多くを使用できます。それらのいくつかは-

Math PI function− Clojureは、PIの値に対してMathメソッドを使用できます。以下はサンプルコードです。

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

上記のコードは次の出力を生成します。

出力

3.141592653589793

System Properties− Clojureは、システムプロパティを照会することもできます。以下はサンプルコードです。

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

システム上のJavaのバージョンに応じて、対応する値が表示されます。以下は出力例です。

出力

1.8.0_45