You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 21:36:01