2

変数に型が格納されている場合

(def ta java.util.Vector)

aに格納されているシンボルを使用して新しいVector型を初期化するにはどうすればよいですか?

例えば。 (initialize ta params)=>#Vector <params>

4

1 に答える 1

5

あなたtajava.lang.ClassnewInstanceのインスタンスなので、メソッドを直接使用できます。

(.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]>

適切なコンストラクターを取得するには、パラメータータイプを正確に一致させる必要があるため、これは少し面倒な場合があります。

于 2012-09-09T08:26:15.867 に答える