如何在Java静态方法上获取clojure句柄,类似于_memfn_用于Java实
发布时间:2020-12-15 08:46:23 所属栏目:Java 来源:网络整理
导读:为了处理我们稍后可以调用的 Java实例方法,我们可以调用memfn函数: user= (def g (memfn Integer/toString))#'user/guser= (g 789)"789" 这对Java静态方法不起作用: user= (def g (memfn Integer/toHexString))#'user/guser= (g 789)IllegalArgumentExcept
为了处理我们稍后可以调用的
Java实例方法,我们可以调用memfn函数:
user=> (def g (memfn Integer/toString)) #'user/g user=> (g 789) "789" 这对Java静态方法不起作用: user=> (def g (memfn Integer/toHexString)) #'user/g user=> (g 789) IllegalArgumentException No matching method found: toHexString for class java.lang.Long clojure.lang.Reflector.invokeMatchingMethod (Reflector.java:52) user=> (g) ArityException Wrong number of args (0) passed to: user$g clojure.lang.AFn.throwArity (AFn.java:437) 我们如何获得Java静态方法的句柄,以便稍后调用它? 解决方法
(defn g [x](Integer / toHexString x))……?如果你愿意,你可以将它包装在一个宏中,但是没有什么可做的:
(defmacro static-fn [f] `(fn [x#] (~f x#))) (def g (static-fn Integer/toHexString)) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |