Clojure - Interface Java
Como já sabemos, o código Clojure é executado no ambiente virtual Java no final. Portanto, só faz sentido que Clojure seja capaz de utilizar todas as funcionalidades do Java. Neste capítulo, vamos discutir a correlação entre Clojure e Java.
Chamando Métodos Java
Os métodos Java podem ser chamados usando a notação de ponto. Um exemplo são strings. Visto que todas as strings em Clojure são strings Java, você pode chamar métodos Java normais em strings.
Um exemplo de como isso é feito é mostrado no programa a seguir.
Exemplo
(ns Project
(:gen-class))
(defn Example []
(println (.toUpperCase "Hello World")))
(Example)
O programa acima produz a seguinte saída. Você pode ver no código que, se apenas chamar a notação de ponto para qualquer método de string, ela também funcionará no Clojure.
Resultado
HELLO WORLD
Chamando métodos Java com parâmetros
Você também pode chamar métodos Java com parâmetros. Um exemplo de como isso é feito é mostrado no programa a seguir.
Exemplo
(ns Project
(:gen-class))
(defn Example []
(println (.indexOf "Hello World","e")))
(Example)
O programa acima produz a seguinte saída. Você pode ver pelo código acima, que estamos passando o parâmetro “e” para o método indexOf. O programa acima produz a seguinte saída.
Resultado
1
Criação de objetos Java
Os objetos podem ser criados em Clojure usando a palavra-chave 'novo' semelhante ao que é feito em Java.
Um exemplo de como isso é feito é mostrado no programa a seguir.
Exemplo
(ns Project
(:gen-class))
(defn Example []
(def str1 (new String "Hello"))
(println str1))
(Example)
O programa acima produz a seguinte saída. Você pode ver no código acima, que podemos usar a palavra-chave 'new' para criar um novo objeto da classe String existente do Java. Podemos passar o valor ao criar o objeto, assim como fazemos em Java. O programa acima produz a seguinte saída.
Resultado
Hello
A seguir está outro exemplo que mostra como podemos criar um objeto da classe Integer e usá-lo nos comandos normais do Clojure.
Exemplo
(ns Project
(:gen-class))
(defn Example []
(def my-int(new Integer 1))
(println (+ 2 my-int)))
(Example)
O programa acima produz a seguinte saída.
Resultado
3
Comando de Importação
Também podemos usar o comando import para incluir bibliotecas Java no namespace para que as classes e métodos possam ser acessados facilmente.
O exemplo a seguir mostra como podemos usar o comando import. No exemplo, estamos usando o comando import para importar as classes dojava.util.stackbiblioteca. Podemos então usar o método push e pop da classe stack como eles são.
Exemplo
(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)
O programa acima produz a seguinte saída.
Resultado
First Element
Executando código usando o comando Java
O código Clojure pode ser executado usando o comando Java. A seguir está a sintaxe de como isso pode ser feito.
java -jar clojure-1.2.0.jar -i main.clj
Você deve mencionar o arquivo jar do Clojure, para que todas as classes baseadas em Clojure sejam carregadas no JVM. O arquivo 'main.clj' é o arquivo de código Clojure que precisa ser executado.
Funções Java integradas
Clojure pode usar muitas das funções integradas do Java. Alguns deles são -
Math PI function- Clojure pode usar o método Math para o valor de PI. A seguir está um código de exemplo.
Exemplo
(ns Project
(:gen-class))
(defn Example []
(println (. Math PI)))
(Example)
O código acima produz a seguinte saída.
Resultado
3.141592653589793
System Properties- Clojure também pode consultar as propriedades do sistema. A seguir está um código de exemplo.
Exemplo
(ns Project
(:gen-class))
(defn Example []
(println (.. System getProperties (get "java.version"))))
(Example)
Dependendo da versão do Java no sistema, o valor correspondente será exibido. A seguir está um exemplo de saída.
Resultado
1.8.0_45