Учебники

Clojure — интерфейс Java

Как мы уже знаем, код Clojure работает в виртуальной среде Java в конце. Таким образом, имеет смысл только то, что Clojure может использовать все функциональные возможности Java. В этой главе давайте обсудим корреляцию между Clojure и Java.

Вызов методов Java

Методы Java могут быть вызваны с использованием точечной нотации. Примером являются строки. Поскольку все строки в Clojure в любом случае являются строками Java, вы можете вызывать обычные методы Java для строк.

Пример того, как это делается, показан в следующей программе.

пример

Live Demo

(ns Project
   (:gen-class))
(defn Example []
   (println (.toUpperCase "Hello World")))
(Example)

Вышеуказанная программа производит следующий вывод. Из кода видно, что если вы просто вызовете точечную запись для любого строкового метода, он также будет работать в Clojure.

Выход

HELLO WORLD

Вызов методов Java с параметрами

Вы также можете вызывать методы Java с параметрами. Пример того, как это делается, показан в следующей программе.

пример

Live Demo

(ns Project
   (:gen-class))
(defn Example []
   (println (.indexOf "Hello World","e")))
(Example)

Вышеуказанная программа производит следующий вывод. Из приведенного выше кода видно, что мы передаем параметр «e» в метод indexOf. Вышеуказанная программа производит следующий вывод.

Выход

1

Создание объектов Java

Объекты могут быть созданы в Clojure с помощью ключевого слова «new», аналогичного тому, что делается в Java.

Пример того, как это делается, показан в следующей программе.

пример

Live Demo

(ns Project
   (:gen-class))
(defn Example []
   (def str1 (new String "Hello"))
   (println str1))
(Example)

Вышеуказанная программа производит следующий вывод. Из приведенного выше кода видно, что мы можем использовать ключевое слово «new» для создания нового объекта из существующего класса String из Java. Мы можем передать значение при создании объекта, как в Java. Вышеуказанная программа производит следующий вывод.

Выход

Hello

Ниже приведен еще один пример, который показывает, как мы можем создать объект класса Integer и использовать их в обычных командах Clojure.

пример

Live Demo

(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 класса стека как есть.

пример

Live Demo

(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. Ниже приведен пример кода.

пример

Live Demo

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

Приведенный выше код производит следующий вывод.

Выход

3.141592653589793

Системные свойства — Clojure также может запрашивать системные свойства. Ниже приведен пример кода.

пример

Live Demo

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

В зависимости от версии Java в системе будет отображаться соответствующее значение. Ниже приведен пример вывода.