Clojure - Interface Java
Comme nous le savons déjà, le code Clojure s'exécute sur l'environnement virtuel Java à la fin. Il est donc logique que Clojure soit capable d'utiliser toutes les fonctionnalités de Java. Dans ce chapitre, discutons de la corrélation entre Clojure et Java.
Appel de méthodes Java
Les méthodes Java peuvent être appelées en utilisant la notation par points. Un exemple est les chaînes. Puisque toutes les chaînes de Clojure sont de toute façon des chaînes Java, vous pouvez appeler des méthodes Java normales sur des chaînes.
Un exemple sur la façon dont cela est fait est montré dans le programme suivant.
Exemple
(ns Project
(:gen-class))
(defn Example []
(println (.toUpperCase "Hello World")))
(Example)
Le programme ci-dessus produit la sortie suivante. Vous pouvez voir à partir du code que si vous appelez simplement la notation par points pour n'importe quelle méthode de chaîne, cela fonctionnera également dans Clojure.
Production
HELLO WORLD
Appel de méthodes Java avec des paramètres
Vous pouvez également appeler des méthodes Java avec des paramètres. Un exemple sur la façon dont cela est fait est montré dans le programme suivant.
Exemple
(ns Project
(:gen-class))
(defn Example []
(println (.indexOf "Hello World","e")))
(Example)
Le programme ci-dessus produit la sortie suivante. Vous pouvez voir à partir du code ci-dessus, que nous passons le paramètre «e» à la méthode indexOf. Le programme ci-dessus produit la sortie suivante.
Production
1
Création d'objets Java
Les objets peuvent être créés dans Clojure en utilisant le mot-clé «nouveau» similaire à ce qui est fait en Java.
Un exemple sur la façon dont cela est fait est montré dans le programme suivant.
Exemple
(ns Project
(:gen-class))
(defn Example []
(def str1 (new String "Hello"))
(println str1))
(Example)
Le programme ci-dessus produit la sortie suivante. Vous pouvez voir à partir du code ci-dessus, que nous pouvons utiliser le mot-clé 'new' pour créer un nouvel objet à partir de la classe String existante de Java. Nous pouvons transmettre la valeur lors de la création de l'objet, tout comme nous le faisons en Java. Le programme ci-dessus produit la sortie suivante.
Production
Hello
Voici un autre exemple qui montre comment nous pouvons créer un objet de la classe Integer et les utiliser dans les commandes Clojure normales.
Exemple
(ns Project
(:gen-class))
(defn Example []
(def my-int(new Integer 1))
(println (+ 2 my-int)))
(Example)
Le programme ci-dessus produit la sortie suivante.
Production
3
Commande d'importation
Nous pouvons également utiliser la commande import pour inclure des bibliothèques Java dans l'espace de noms afin que les classes et les méthodes soient facilement accessibles.
L'exemple suivant montre comment utiliser la commande import. Dans l'exemple, nous utilisons la commande import pour importer les classes depuis lejava.util.stackbibliothèque. Nous pouvons ensuite utiliser la méthode push et pop de la classe stack telle quelle.
Exemple
(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)
Le programme ci-dessus produit la sortie suivante.
Production
First Element
Exécution de code à l'aide de la commande Java
Le code Clojure peut être exécuté à l'aide de la commande Java. Voici la syntaxe de la façon dont cela peut être fait.
java -jar clojure-1.2.0.jar -i main.clj
Vous devez mentionner le fichier jar Clojure, afin que toutes les classes basées sur Clojure soient chargées dans la JVM. Le fichier 'main.clj' est le fichier de code Clojure qui doit être exécuté.
Fonctions intégrées Java
Clojure peut utiliser de nombreuses fonctions intégrées de Java. Certains d'entre eux sont -
Math PI function- Clojure peut utiliser la méthode Math à la valeur de PI. Voici un exemple de code.
Exemple
(ns Project
(:gen-class))
(defn Example []
(println (. Math PI)))
(Example)
Le code ci-dessus produit la sortie suivante.
Production
3.141592653589793
System Properties- Clojure peut également interroger les propriétés du système. Voici un exemple de code.
Exemple
(ns Project
(:gen-class))
(defn Example []
(println (.. System getProperties (get "java.version"))))
(Example)
Selon la version de Java sur le système, la valeur correspondante sera affichée. Voici un exemple de sortie.
Production
1.8.0_45