从Clojure调用java函数

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

mik*_*era 18

您可以使用Clojure中的所有Java函数.查看Clojure Java互操作的精彩页面.

特别是,你只需要根据你正在处理的Java构造类型来获得正确的语法,例如在java.lang.System上对静态成员"out"执行println方法:

(.println (System/out) "hi")
Run Code Online (Sandbox Code Playgroud)

  • 没有probs,原因是separator是File类的静态成员,就像out是System类的静态成员一样.在println的情况下,您实际上将两个Java互操作构造链接在一起 - 访问System.out,然后在结果上调用println. (3认同)

tva*_*hon 7

正如早先的海报所指出的那样,你给出的两个例子只是一点点:

(.wait (java.lang.Object.) 3) ;; this actually throws an IllegalMonitorStateException

(.println java.lang.System/out "hi")
Run Code Online (Sandbox Code Playgroud)

应该管用!