如何在clojure中构建类型?

时间:2012-09-09 08:00:21

标签: clojure

如果我有一个存储在变量中的类型

(def ta java.util.Vector)

如何使用存储在?

中的符号初始化新的Vector类型

例如。 (initialize ta params) =&gt; #Vector <params>

1 个答案:

答案 0 :(得分:5)

您的tajava.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]>

虽然这可能会更加繁琐,因为您需要完全匹配参数类型才能获得正确的构造函数....