[英]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.