Clojure 支持Java

調用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)








發佈了114 篇原創文章 · 獲贊 0 · 訪問量 6647
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章