Clojure-java-interface

提供:Dev Guides
移動先:案内検索

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で行われるのと同様の「新しい」キーワードを使用して、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および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コマンドを使用したコードの実行

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

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

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

Java組み込み関数

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

  • Math PI関数*-Clojureは、PIの値に対してMathメソッドを使用できます。 以下はコード例です。

(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