Clojure中如何间接向new传递类完成对象实例化?
解决方案
你可以直接用Clojure核心库提供的new-instance函数实现需求,它是普通函数,会对传入的类参数执行求值,完全不需要手动拼接表达式走eval:
(let [my-class my-clojure-class] (java_function (new-instance my-class)))
如果你的类构造函数需要传参,直接在类参数后追加参数即可,示例:
;; 假设类存在带String、int两个参数的构造器 (new-instance my-class "测试参数" 1024)
原写法的问题说明
new是Clojure的特殊形式,不是普通函数,它的第一个参数只会被当做类名字面量解析,不会执行求值,所以没法直接传入绑定了类对象的变量。而new-instance底层封装了Java反射的实例化逻辑,完全适配动态类的实例化场景,比手动eval的写法更安全简洁。
内容的提问来源于stack exchange,提问作者gash
相关产品推荐
相关产品推荐

