从Clojure调用java函数

时间:2010-08-04 14:51:54

标签: java 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函数吗?
  • 如果没有,是否有任何规则可以打电话给他们?如果是,这些功能的参考在哪里?

3 个答案:

答案 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。