Clojure - Java-Schnittstelle
Wie wir bereits wissen, wird Clojure-Code am Ende in der virtuellen Java-Umgebung ausgeführt. Daher ist es nur sinnvoll, dass Clojure alle Funktionen von Java nutzen kann. Lassen Sie uns in diesem Kapitel die Korrelation zwischen Clojure und Java diskutieren.
Java-Methoden aufrufen
Java-Methoden können mithilfe der Punktnotation aufgerufen werden. Ein Beispiel sind Zeichenfolgen. Da alle Zeichenfolgen in Clojure ohnehin Java-Zeichenfolgen sind, können Sie normale Java-Methoden für Zeichenfolgen aufrufen.
Ein Beispiel dafür finden Sie im folgenden Programm.
Beispiel
(ns Project
(:gen-class))
(defn Example []
(println (.toUpperCase "Hello World")))
(Example)
Das obige Programm erzeugt die folgende Ausgabe. Sie können dem Code entnehmen, dass die Punktnotation für eine beliebige Zeichenfolgenmethode auch in Clojure funktioniert, wenn Sie sie nur aufrufen.
Ausgabe
HELLO WORLD
Java-Methoden mit Parametern aufrufen
Sie können auch Java-Methoden mit Parametern aufrufen. Ein Beispiel dafür finden Sie im folgenden Programm.
Beispiel
(ns Project
(:gen-class))
(defn Example []
(println (.indexOf "Hello World","e")))
(Example)
Das obige Programm erzeugt die folgende Ausgabe. Sie können dem obigen Code entnehmen, dass wir den Parameter "e" an die indexOf-Methode übergeben. Das obige Programm erzeugt die folgende Ausgabe.
Ausgabe
1
Erstellen von Java-Objekten
Objekte können in Clojure mit dem Schlüsselwort 'new' erstellt werden, ähnlich wie in Java.
Ein Beispiel dafür finden Sie im folgenden Programm.
Beispiel
(ns Project
(:gen-class))
(defn Example []
(def str1 (new String "Hello"))
(println str1))
(Example)
Das obige Programm erzeugt die folgende Ausgabe. Sie können dem obigen Code entnehmen, dass wir das Schlüsselwort 'new' verwenden können, um ein neues Objekt aus der vorhandenen String-Klasse aus Java zu erstellen. Wir können den Wert beim Erstellen des Objekts übergeben, genau wie in Java. Das obige Programm erzeugt die folgende Ausgabe.
Ausgabe
Hello
Das folgende Beispiel zeigt, wie wir ein Objekt der Integer-Klasse erstellen und in den normalen Clojure-Befehlen verwenden können.
Beispiel
(ns Project
(:gen-class))
(defn Example []
(def my-int(new Integer 1))
(println (+ 2 my-int)))
(Example)
Das obige Programm erzeugt die folgende Ausgabe.
Ausgabe
3
Importbefehl
Wir können den Befehl import auch verwenden, um Java-Bibliotheken in den Namespace aufzunehmen, damit auf die Klassen und Methoden problemlos zugegriffen werden kann.
Das folgende Beispiel zeigt, wie wir den Importbefehl verwenden können. Im Beispiel verwenden wir den Befehl import, um die Klassen aus dem zu importierenjava.util.stackBibliothek. Wir können dann die Push- und Pop-Methode der Stapelklasse so verwenden, wie sie sind.
Beispiel
(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)
Das obige Programm erzeugt die folgende Ausgabe.
Ausgabe
First Element
Ausführen von Code mit dem Java-Befehl
Clojure-Code kann mit dem Java-Befehl ausgeführt werden. Im Folgenden finden Sie die Syntax, wie dies durchgeführt werden kann.
java -jar clojure-1.2.0.jar -i main.clj
Sie müssen die Clojure-JAR-Datei erwähnen, damit alle Clojure-basierten Klassen in die JVM geladen werden. Die Datei 'main.clj' ist die Clojure-Codedatei, die ausgeführt werden muss.
Integrierte Java-Funktionen
Clojure kann viele der in Java integrierten Funktionen verwenden. Einige von ihnen sind -
Math PI function- Clojure kann die Math-Methode für den Wert von PI verwenden. Es folgt ein Beispielcode.
Beispiel
(ns Project
(:gen-class))
(defn Example []
(println (. Math PI)))
(Example)
Der obige Code erzeugt die folgende Ausgabe.
Ausgabe
3.141592653589793
System Properties- Clojure kann auch die Systemeigenschaften abfragen. Es folgt ein Beispielcode.
Beispiel
(ns Project
(:gen-class))
(defn Example []
(println (.. System getProperties (get "java.version"))))
(Example)
Abhängig von der Java-Version auf dem System wird der entsprechende Wert angezeigt. Es folgt eine Beispielausgabe.
Ausgabe
1.8.0_45