如果我有一个类型存储在变量中
(def ta java.util.Vector)
如何使用存储在 a 中的符号初始化新的 Vector 类型?
例如。
(initialize ta params)
=>#Vector <params>
如果我有一个类型存储在变量中
(def ta java.util.Vector)
如何使用存储在 a 中的符号初始化新的 Vector 类型?
例如。
(initialize ta params)
=>#Vector <params>
那么你ta
是java.lang.Class的一个实例,所以你可以直接使用该newInstance
方法:
(.newInstance ta)
=> #<Vector []>
如果您想使用构造函数的参数,您可以通过该getConstructor
方法使用以下内容:
(defn build-constructor [klass & types]
"Construct a new class instance dynamically at runtime"
(let [constructor (.getConstructor klass (into-array java.lang.Class types))]
(fn [& args]
(.newInstance constructor (object-array args)))))
((build-constructor ta java.util.Collection) [1 2 3 4])
=> #<Vector [1, 2, 3, 4]>
虽然这可能有点复杂,因为您需要完全匹配参数类型才能获得正确的构造函数......