加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

如何在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))

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读