変数に型が格納されている場合
(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.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]>
適切なコンストラクターを取得するには、パラメータータイプを正確に一致させる必要があるため、これは少し面倒な場合があります。