调用Java类
调用Constructor、Method、Field
(new classname)
(new java.util.Random)
java.util.Random@4f1ada
(def rnd (new java.util.Random))
#'user/rnd
(. class-or-instance member-symbol & args)
(. class-or-instance (member-symbol & args))
(. rnd nextInt)
-791474443
(. rnd nextInt 10)
8
(import [& import-lists])
; import-list => (package-symbol & class-name-symbols)
(import '(java.util Random Locale)
'(java.text MessageFormat))
nil
Syntactic Sugar
(new Random)
==
(Random.)
最终结果相同,语法方式不同
(Classname/membername);static field or method
(. Math PI)
Math/PI
(System/currentTimeMillis)
1226260030788
(. rnd nextInt)
==
(.nextInt rnd)
想同,语法方式不同
(doto class-or-inst & member-access-forms)
(doto (System/getProperties)
(.setProperty "name" "Stuart")
(.setProperty "favoriteColor" "blue"))
Java | Clojure | Sugared |
new Widget("red") | (new Widget "red") | (Widget. "red") |
Math.PI | (. Math PI) | Math/PI |
System.currentTimeMillis() | (. System currentTimeMillis | (System/currentTimeMillis) |
rnd.nextInt() | (. rnd nextInt) | (.nextInt rnd) |
person.getAddress().getZipCode() | (. (. person getAddress) getZipCode) | (.. person getAddress getZipCode) |