TL;DR
- Clojure は
newと.で Java のオブジェクト生成、メソッド呼び出し、フィールドアクセスができ、(.method instance)やClass/fieldといった簡潔な構文も持つ。 java.langは自動でインポートされ、それ以外のパッケージはimportで持ち込む。
内容
Clojure はJava を直接呼び出すのに便利な方法を提供している。
コンストラクタ・メソッド・フィールドへのアクセス
オブジェクトを生成するには、new を使う。
(new classname)(new java.util.Random)クラス名に . を付ける省略記法も使える。
(java.util.Random.). を使うと、メソッドを呼び出せる。
(. class-or-instance member-symbol & args)
(. class-or-instance (member-symbol & args))(def rnd (java.util.Random.))
(. rnd nextInt) ; -1985059884
(. rnd nextInt 10) ; 7. は静的なフィールドやメソッドにも使える。
(. Math PI) ; 3.141592653589793より明示的なアクセス
同じ名前のメソッドとフィールドが両方ある場合、メソッドが優先される。このとき、名前の前に - を付けると、フィールドを呼び出せる。
(. Math -PI) ; 3.141592653589793ただし、Clojure はインスタンスと静的アクセスの両方に対して、より簡潔な構文を提供しているので、それを使うのが好ましい。
(.method instance & args)
(.field instance)
(.-field instance)
(Class/method & args)
Class/field(.nextInt rnd 10) ; 8
(System/lineSeparator) ; "\n"
Math/PI ; 3.141592653589793パッケージのインポート
Clojure は自動的に java.lang をインポートしているので、Math には名前空間の接頭辞を付ける必要がない。java.util.Random など java.lang 以外のパッケージは、import フォームでインポートできる。
(import (package-symbol & class-name-symbols)*)(import '(java.util Random Locale))Javadoc
Clojure の javadoc 関数を使うと、指定したクラスのドキュメントをブラウザで開いてくれる。
(javadoc java.util.Random)