Clojure provides very clear and simple syntax for Java interoperability, using the following functions
import- add functions from the Java library into the current namespace
new- create a new Java object
.- is the short form of the
As Clojure is hosted on the Java Virtual Machine (JVM), its very easy to include libraries from any other languages that runs on the JVM, for example Java, Groovy, Scala, Jython, JRuby, Jaskell, etc.
The Leiningen build tool provides a simple way to include libraries as dependencies, using the
:dependencies section of the
project.clj file. Any library published to Maven Central is available for download by Leiningen, as both Maven Central and Clojars.org repositories are used by default.
Clojure projects and REPL environments include the
java.lang library automatically. Any methods from that library can be used without having to
import them or include any dependencies
Its very easy to call Java methods and objects from clojure using the following syntax
Note Use the instanceMember .toUpperCase to convert a string from lower case to upper case
.toUpperCase function on any string you like, for example
The string passed as an argument should now be all uppercase: "I WAS LOW, BUT NOW I'M UP"
Note Use the staticField
Math/PIto return the approximate value of Pi
You can treat any static field like any name defined in your Clojure code, so when evaluated the static field simply returns the value it represents
In this case the
Math/PI static field simply returns the approximate value of Pi that fits into a java.lang.Double type.
Getting the Java environmentλ︎
Earlier we used Clojure functions to find information about our environment. We can also used the
getProperty() method from the
java.lang.System object to ask for the java version and jvm name.
Note Get version of Java & the JVM, returning those values as a meaningful string. Then get the version of the Clojure project
System/getenvto return your system's environment variables as a map
You may notice that this is a map data structure that we return, so we can use use destructuring or the maps behaviour itself to pull out information.
Hint A full list of properties can be seen in the getProperty() documentation
There are more examples of Java Interoperability in the next few sections.