我可以在clojure中使用(.toUpperCase“GOOD”),因为“GOOD”是java字符串,而java字符串具有toUpperCase方法。
我也可以使用clojure中的(java.io.File / separator)作为调用java函数的方法。
但是,为什么我不能调用(java.lang / Object wait 3)或(java.lang.System / println“hi”)?
答案 0 :(得分:18)
您可以使用Clojure中的所有Java函数。请参阅Clojure Java interop上的精彩页面。
特别是,您只需要根据您正在处理的Java构造的类型来获得正确的语法,例如:从java.lang.System:
执行静态成员“out”上的println方法(.println (System/out) "hi")
答案 1 :(得分:7)
正如早先的海报所指出的那样,你给出的两个例子只是一点点:
(.wait (java.lang.Object.) 3) ;; this actually throws an IllegalMonitorStateException
(.println java.lang.System/out "hi")
应该工作!
答案 2 :(得分:3)
首先,Object.wait()函数不是静态函数,您应该使用as:
(。wait(java.lang.Object。)3)
其次,在获得锁之后应该调用Object.wait()函数。否则,它将抛出IllegalMonitorStateException。