Как мы уже знаем, код 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
Объекты могут быть созданы в Clojure с помощью ключевого слова «new», аналогичного тому, что делается в Java.
Пример того, как это делается, показан в следующей программе.
пример
(ns Project (:gen-class)) (defn Example [] (def str1 (new String "Hello")) (println str1)) (Example)
Вышеуказанная программа производит следующий вывод. Из приведенного выше кода видно, что мы можем использовать ключевое слово «new» для создания нового объекта из существующего класса String из Java. Мы можем передать значение при создании объекта, как в 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 для импорта классов из библиотеки 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
Вы должны упомянуть файл jar Clojure, чтобы все классы, основанные на Clojure, были загружены в JVM. Файл main.clj — это файл кода Clojure, который необходимо выполнить.
Встроенные функции Java
Clojure может использовать многие встроенные функции Java. Некоторые из них —
Математическая функция PI — Clojure может использовать метод Math для значения PI. Ниже приведен пример кода.
пример
(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 в системе будет отображаться соответствующее значение. Ниже приведен пример вывода.