Clojure - Interfaz Java

Como ya sabemos, el código de Clojure se ejecuta en el entorno virtual de Java al final. Por lo tanto, solo tiene sentido que Clojure pueda utilizar todas las funcionalidades de Java. En este capítulo, analicemos la correlación entre Clojure y Java.

Llamar a métodos Java

Los métodos de Java se pueden llamar mediante la notación de puntos. Un ejemplo son las cuerdas. Dado que todas las cadenas en Clojure son de todos modos cadenas de Java, puede llamar a métodos Java normales en cadenas.

Un ejemplo de cómo se hace esto se muestra en el siguiente programa.

Ejemplo

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

El programa anterior produce la siguiente salida. Puede ver en el código que si solo llama a la notación de puntos para cualquier método de cadena, también funcionará en Clojure.

Salida

HELLO WORLD

Llamar a métodos Java con parámetros

También puede llamar a métodos Java con parámetros. Un ejemplo de cómo se hace esto se muestra en el siguiente programa.

Ejemplo

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

El programa anterior produce la siguiente salida. Puede ver en el código anterior que estamos pasando el parámetro "e" al método indexOf. El programa anterior produce la siguiente salida.

Salida

1

Crear objetos Java

Los objetos se pueden crear en Clojure usando la palabra clave 'nueva' similar a lo que se hace en Java.

Un ejemplo de cómo se hace esto se muestra en el siguiente programa.

Ejemplo

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

El programa anterior produce la siguiente salida. Puede ver en el código anterior que podemos usar la palabra clave 'nuevo' para crear un nuevo objeto a partir de la clase String existente de Java. Podemos pasar el valor mientras creamos el objeto, tal como lo hacemos en Java. El programa anterior produce la siguiente salida.

Salida

Hello

A continuación se muestra otro ejemplo que muestra cómo podemos crear un objeto de la clase Integer y usarlos en los comandos normales de Clojure.

Ejemplo

(ns Project
   (:gen-class))
(defn Example []
   (def my-int(new Integer 1))
   (println (+ 2 my-int)))
(Example)

El programa anterior produce la siguiente salida.

Salida

3

Importar comando

También podemos usar el comando de importación para incluir bibliotecas de Java en el espacio de nombres para que se pueda acceder fácilmente a las clases y métodos.

El siguiente ejemplo muestra cómo podemos usar el comando de importación. En el ejemplo, estamos usando el comando de importación para importar las clases desde eljava.util.stackbiblioteca. Luego podemos usar el método push y pop de la clase de pila tal como están.

Ejemplo

(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)

El programa anterior produce la siguiente salida.

Salida

First Element

Ejecución de código mediante el comando Java

El código de Clojure se puede ejecutar usando el comando de Java. A continuación se muestra la sintaxis de cómo se puede hacer esto.

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

Debe mencionar el archivo jar de Clojure, para que todas las clases basadas en Clojure se carguen en la JVM. El archivo 'main.clj' es el archivo de código Clojure que debe ejecutarse.

Funciones integradas de Java

Clojure puede usar muchas de las funciones integradas de Java. Algunos de ellos son ...

Math PI function- Clojure puede usar el método Math con el valor de PI. A continuación se muestra un código de ejemplo.

Ejemplo

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

El código anterior produce la siguiente salida.

Salida

3.141592653589793

System Properties- Clojure también puede consultar las propiedades del sistema. A continuación se muestra un código de ejemplo.

Ejemplo

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

Dependiendo de la versión de Java en el sistema, se mostrará el valor correspondiente. A continuación se muestra un resultado de ejemplo.

Salida

1.8.0_45