[英]Calling java functions from Clojure
我可以在clojure中使用(.toUpperCase“GOOD”),因為“GOOD”是java字符串,而java字符串具有toUpperCase方法。
我也可以使用clojure中的(java.io.File / separator)作為調用java函數的方法。
但是,為什么我不能調用(java.lang / Object wait 3)或(java.lang.System / println“hi”)?
您可以使用Clojure中的所有Java函數。 查看Clojure Java互操作的精彩頁面。
特別是,你只需要根據你正在處理的Java構造類型來獲得正確的語法,例如在java.lang.System上對靜態成員“out”執行println方法:
(.println (System/out) "hi")
正如早先的海報所指出的那樣,你給出的兩個例子只是一點點:
(.wait (java.lang.Object.) 3) ;; this actually throws an IllegalMonitorStateException
(.println java.lang.System/out "hi")
應該管用!
首先, Object.wait()
函數不是靜態函數,您應該使用:
(.wait (java.lang.Object.) 3)
其次,在獲得鎖之后應該調用Object.wait()
函數。 否則,它將拋出IllegalMonitorStateException
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.