这是一个Clojure REPL会议:
moon.core> Double
java.lang.Double
moon.core> (Double/parseDouble "1.0")
1.0
moon.core> Double/parseDouble
CompilerException java.lang.RuntimeException: Unable to find static field: parseDouble in class java.lang.Double, compiling:(*cider-repl moon*:1:7159)
我可以引用Double
,我可以调用 Double/parseDouble
,但我不能直接引用它。我在Java标准库中看到了与其他类方法相同的结果(例如Math/abs
,Integer/parseInt
)。那是为什么?
答案 0 :(得分:4)
如果你想将一个静态Java方法变成一个可以作为第一类东西处理的Clojure函数,你可以轻松地将一个函数包装起来:
(def pd #(Double/parseDouble %))
#'user/pd
(pd "1.0")
1.0
memfn
函数可用于为Java实例方法执行类似的操作。
答案 1 :(得分:3)
这不起作用(在REPL中或其他方式),因为parseDouble
类上没有名为Double
的静态字段。 parseDouble
是一种方法。您可以调用它,但不能像字段一样访问它。