在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" (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |