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