Clojureは、JVM (Java仮想マシン)上で動き、型システム、ガーベッジ・コレクション、スレッドなどを利用する言語として設計された。関数はすべてJVMバイトコードにコンパイルされる。ClojureはJavaのライブラリを利用するのに適しており、Javaのピリオド連結表記をそのまま利用できる。クラス名の全体を書いて呼び出すことが可能だが、インポート後には短縮名も使える。Clojureでは、プロクシーを用いることで、Javaクラスとインターフェースを動的実装することができる。
Swingの小さなアプリの例:
(import '(javax.swing JFrame JLabel JTextField JButton)
'(java.awt.event ActionListener)
'(java.awt GridLayout))
(defn celsius []
(let [frame (JFrame. "Celsius Converter")
temp-text (JTextField.)
celsius-label (JLabel. "Celsius")
convert-button (JButton. "Convert")
fahrenheit-label (JLabel. "Fahrenheit")]
(.addActionListener convert-button
(proxy [ActionListener] []
(actionPerformed [evt]
(let [c (Double/parseDouble (.getText temp-text))]
(.setText fahrenheit-label
(str (+ 32 (* 1.8 c)) " Fahrenheit"))))))
(doto frame
(.setLayout (GridLayout. 2 2 3 3))
(.add temp-text)
(.add celsius-label)
(.add convert-button)
(.add fahrenheit-label)
(.setSize 300 80)
(.setVisible true))))
(celsius)