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

在Clojure中,如何动态使用java类?

发布时间:2020-12-14 17:44:16 所属栏目:Java 来源:网络整理
导读:在Clojure中,如何使用存储在变量中的 java类? 如何修复以下代码? (def a java.lang.String)(new a "1"); CompilerException java.lang.IllegalArgumentException: Unable to resolve classname: a 为什么这个工作正常? (def a str)(a "1") 解决方法 最优
在Clojure中,如何使用存储在变量中的 java类?

如何修复以下代码?

(def a java.lang.String)
(new a "1"); CompilerException java.lang.IllegalArgumentException: Unable to resolve classname: a

为什么这个工作正常?

(def a str)
(a "1")

解决方法

最优雅的解决方案是编写与new相同但能够动态接收类的构造:
(defn construct [klass & args]
    (clojure.lang.Reflector/invokeConstructor klass (into-array Object args)))
 (def a HashSet)
 (construct HashSet '(1 2 3)); It works!!!

该解决方案克服了@mikera的答案的限制(见评论).

特别感谢@Micha? Marczyk,让我知道invokeConstructor回答我的另一个问题:Clojure: how to create a record inside a function?.

另一种选择是将作为匿名函数的调用存储到构造函数中.在我们的情况下

(def a #(String. %1))
(a "111"); "111"

(编辑:李大同)

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

    推荐文章
      热点阅读